leetcode 898疑惑的很?
题目:
我们有一个非负整数数组 A
。
对于每个(连续的)子数组 B = [A[i], A[i+1], ..., A[j]]
( i <= j
),我们对 B
中的每个元素进行按位或操作,获得结果 A[i] | A[i+1] | ... | A[j]
。
返回可能结果的数量。 (多次出现的结果在最终答案中仅计算一次。)
class Solution:
def subarrayBitwiseORs(self, A) -> int:
result = set(A)
maxValue = max(A)
mask = 1
while mask<=maxValue:
mask*=2
mask-=1
i=0
while i < len(A):
j = i-1
value = A[i]
while j>=0 and value<mask:
value |= A[j]
j-=1
result.add(value)
i+=1
return len(result)
class Solution(object):
def subarrayBitwiseORs(self, A):
"""
:type A: List[int]
:rtype: int
"""
res = set()
cur = set()
for a in A:
cur = {n | a for n in cur} | {a}
res |= cur
return len(res)
明明第一种做了优化 为什么时间还比第二种长? 真是奇怪的很