Python程式:查詢每個查詢的最大異或值


假設我們有一個預排序的陣列 nums,大小為 n,還有一個值 b。我們希望執行以下查詢 n 次:

  • 搜尋一個非負值 k < 2^m,使得 nums 中所有元素與 k 的異或結果最大化。因此,k 是第 i 個查詢的答案。

  • 從當前陣列 nums 中移除最後一個元素。

  • 我們需要找到一個數組 answer,其中 answer[i] 是第 i 個查詢的答案。

所以,如果輸入類似 nums = [0,1,1,3],m = 2,則輸出將為 [0,3,2,3],因為

  • nums = [0,1,1,3],k = 0,因為 0 XOR 1 XOR 1 XOR 3 XOR 0 = 3。

  • nums = [0,1,1],k = 3,因為 0 XOR 1 XOR 1 XOR 3 = 3。

  • nums = [0,1],k = 2,因為 0 XOR 1 XOR 2 = 3。

  • nums = [0],k = 3,因為 0 XOR 3 = 3。

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

  • x := 2^m - 1

  • 對於 i 從 0 到 nums 大小 - 1,執行

    • nums[i] := nums[i] XOR x

    • x := nums[i]

  • 返回反轉後的 nums

示例

讓我們看看下面的實現,以便更好地理解:

def solve(nums, m):
   x=2**m-1
   for i in range(len(nums)):
      nums[i]^= x
      x = nums[i]
   return(nums[::-1])

nums = [0,1,1,3]
m = 2
print(solve(nums, m))

輸入

[0,1,1,3], 2

輸出

[0, 3, 2, 3]

更新於: 2021年10月7日

215 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.