📅  最后修改于: 2023-12-03 15:11:40.430000             🧑  作者: Mango
给定一个整数数组 nums
,对于数组的每个子数组 subarray
,我们计算该子数组的所有元素按位或的结果,将所有子数组的结果累加起来,并返回最终结果。
输入:nums = [1,2,4]
输出:7
解释:
子数组按位或的结果:
[1] = 1
[1, 2] = 3
[1, 2, 4] = 7
[2] = 2
[2, 4] = 6
[4] = 4
总和为 1 + 3 + 7 + 2 + 6 + 4 = 23
题目要求对于每个子数组计算按位或的结果,并将所有子数组的结果累加起来。因此,我们需要枚举所有的子数组,并计算它们的按位或结果。然后将所有的结果累加起来即可。
在实现过程中,我们可以使用位运算中的或运算符 |
来进行按位或运算。同时,为了避免重复计算,我们可以使用两个指针 left
和 right
来表示当前子数组的左右边界,并在枚举子数组时更新这两个指针。
具体实现见下方代码片段。
class Solution:
def subarrayBitwiseORs(self, nums: List[int]) -> int:
ans = set()
left, right = 0, 0
for num in nums:
left, right = right, len(ans)
ans.add(num)
for i in range(left, right):
ans.add(ans[i] | num)
return len(ans)