leetcode 898 子陣列按位或操作

2021-10-09 10:28:06 字數 2179 閱讀 5195

我們有乙個非負整數陣列 a。

對於每個(連續的)子陣列 b = [a[i], a[i+1], …, a[j]] ( i <= j),我們對 b 中的每個元素進行按位或操作,獲得結果 a[i] | a[i+1] | … | a[j]。

返回可能結果的數量。 (多次出現的結果在最終答案中僅計算一次。)

示例 1:

輸入:[0]

輸出:1

解釋:只有乙個可能的結果 0 。

示例 2:

輸入:[1,1,2]

輸出:3

解釋:可能的子陣列為 [1],[1],[2],[1, 1],[1, 2],[1, 1, 2]。

產生的結果為 1,1,2,1,3,3 。

有三個唯一值,所以答案是 3 。

示例 3:

輸入:[1,2,4]

輸出:6

解釋:可能的結果是 1,2,3,4,6,以及 7 。

1 <= a.length <= 50000

0 <= a[i] <= 10^9

最有方法的思路:

中間那一列儲存的是:第乙個set儲存的是到目前為止的或的結果,第二個set儲存的是我前面的那個元素

然後見盡力啊新的元素的時候,我就用心的元素去或上這兩個set,然後加上自己本身,就是結果。因為自己本身或就是自己本身

也是動態規劃的思想。

顯示以1結尾的,只有1

然後2進來,或上1 得3 並加上自己本身

這是一種空間換時間的做法,乙個cur集合儲存上一次迴圈的位或結果集合,將這些集合和當前迴圈的元素進行位或運算,在補充上當前元素。然後乙個res和cur取並集。

為什麼要有乙個cur而不直接用res呢?或者為什麼要用兩個集合而不是乙個集合呢?

考慮[1,2,4]這個測試用例:

第一輪迴圈時,a=1,cur=,res=

第二輪迴圈時,a=2,cur = | = , res=

第三輪迴圈時,a=4,cur=| = ,res=

那麼顯然直接返回cur的長度是不可能的,直接返回cur和原始輸入a的並集也是不可以的,因為漏掉了3。對於我能考慮到替換res的兩種方法,都會導致測試不通過,所以res這個集合的存在是有必要的。

# 連續子陣列按位或操作  leetcode-898

#方法一

defsubarraybitwiseors

(a: list[

int])-

>

int:

n =len(a)

s =for i in

range(0

, n)

: temp = a[i]

s.add(temp)

for j in

range

(i+1

, n)

: temp |

= a[j]

s.add(temp)

return

len(s)

# 方法二 因為set每次都會判斷是否有重複的值 慢 換成列表

deflianxv_002

(a: list[

int])-

>

int:

n =len(a)

s =for i in

range(0

, n)

: temp = a[i]

for j in

range

(i+1

, n)

: temp |

= a[j]

return

len(

set(s)

)#方法三:動態規劃的思想

deflianxv_003

(a:list[

int])-

>

int:

cur =

set(

) res =

set(

)for a in a:

# a 是要新進來的元素

cur =

| res |

= cur # cur和res取得並集

return

len(res)

LeetCode 按奇偶排序陣列

給定乙個非負整數陣列a,返回乙個由a的所有偶數元素組成的陣列,後面跟a的所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。示例 輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。1 a.length 50000 a i 5000cl...

Leetcode 按奇偶排序陣列

給定乙個非負整數陣列a,返回乙個由a的所有偶數元素組成的陣列,後面跟a的所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。示例 輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。1 a.length 50000 a i 5000in...

78 子陣列按位或操作

題目描述 我們有乙個非負整數陣列 a。對於每個 連續的 子陣列 b a i a i 1 a j i j 我們對 b 中的每個元素進行按位或操作,獲得結果 a i a i 1 a j 返回可能結果的數量。多次出現的結果在最終答案中僅計算一次。示例 1 輸入 0 輸出 1 解釋 只有乙個可能的結果 0 ...