在 Python 中查詢具有最大位運算 AND 和位運算 OR 的子序列


假設我們有一個由 n 個元素組成的陣列,我們需要透過選擇陣列的兩個子序列(它們可以相同也可以不同)來顯示最大和,使得第一個子序列的所有元素的按位 AND 運算和與第二個子序列的所有元素的按位 OR 運算和最大。

因此,如果輸入類似於 A = {4, 6, 7, 2},那麼輸出將為 14,因為我們透過僅選擇 7 就可以獲得最大 AND 值,並透過選擇全部(4 | 6 | 7 | 2)= 7 來獲得最大 OR 值。因此,結果將為 7 + 7 = 14。

為了解決這個問題,我們將遵循以下步驟 −

  • and_max := 陣列的最大值

  • or_max := 0

  • 對於 i 從 0 到陣列大小迴圈執行

    • or_max := or_max OR arr[i]

  • 返回 and_max + or_max

示例 

讓我們看看以下實現以獲得更好的理解 −

 現場演示

def get_max_sum(arr):
   and_max = max(arr)
   or_max = 0
   for i in range(len(arr)):
      or_max|= arr[i]
   return and_max + or_max
a = [4,6,7,2]
print(get_max_sum(a))

輸入

[4,6,7,2]

輸出

14

更新於:19-Aug-2020

666 瀏覽量

啟動您的 職業

完成課程獲得認證

開始
廣告
© . All rights reserved.