Python程式:查詢小於限制且異或結果最大的元素列表


假設我們有一個數字列表 nums 和一個查詢列表,其中每個查詢包含 [x, limit]。我們必須找到一個列表,對於每個查詢 [x, limit],我們找到 nums 中的一個元素 e,使得 e ≤ limit 且 e XOR x 最大化。如果沒有這樣的元素,則返回 -1。

因此,如果輸入類似於 nums = [3, 5, 9] queries = [[4, 6],[2, 0]],則輸出將為 [3, -1],因為對於第一個查詢,我們可以在 nums 中使用 2 或 4。3 ^ 4 = 7 而 5 ^ 4 = 3,所以我們選擇 3,它產生更大的 XOR。在第二個查詢中,沒有小於或等於 0 的數字,所以我們將其設定為 -1。

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

  • trie := 一個新的對映

  • 定義一個函式 bits()。它將接收 i

  • 返回 i 的 32 位二進位制表示

  • 定義一個函式 insert。它將接收 i

  • node := trie

  • 對於 bits(i) 中的每個 c,執行以下操作:

    • node := 如果 c 不在 node 中,則在其中插入一個空對映

  • node[2] := i

  • 定義一個函式 query()。它將接收 i

  • node := trie

  • 對於 bits(i) 中的每個 c,執行以下操作:

    • rc := c XOR 1

    • node := 如果存在則 node[rc],否則 node[c]

  • 返回 node[2]

  • 從主方法執行以下操作:

  • 對列表 A 進行排序

  • B := 一個元素形式為 (i, x, limit) 的列表,對於每個查詢索引 i 和查詢值 x 和 limit。然後根據 limit 對其進行排序

  • (j, n, ans) := (0, A 的大小, 一個與查詢大小相同的列表, 用 -1 填充)

  • 對於 B 中的每個索引 i 和值 x 和 limit,執行以下操作:

    • 當 j < n 且 A[j] <= limit 時,執行以下操作:

      • insert(A[j])

      • j := j + 1

    • 如果 j 不為零,則

      • ans[i] := query(x)

  • 返回 ans

示例(Python)

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

 即時演示

class Solution:
   def solve(self, A, queries):
      trie = {}
      def bits(i):
         return map(int, bin(i)[2:].zfill(32))
      def insert(i):
         node = trie
         for c in bits(i):
            node = node.setdefault(c, {})
         node[2] = i
      def query(i):
         node = trie
         for c in bits(i):
            rc = c ^ 1
            node = node.get(rc, node.get(c))
         return node[2]
      A.sort()
      B = sorted([(i, x, limit) for i, (x, limit) in enumerate(queries)], key=lambda x: x[2])
j, n, ans = 0, len(A), [-1] * len(queries)
      for i, x, limit in B:
         while j < n and A[j] <= limit:
            insert(A[j])
            j += 1
         if j:
            ans[i] = query(x)
      return ans
ob = Solution()
nums = [3, 5, 9]
queries = [
   [4, 6],
   [2, 0]
]
print(ob.solve(nums, queries))

輸入

[3, 5, 9], [[4, 6],[2, 0]]

輸出

[3, -1]

更新於: 2020-12-22

138 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.