Python中查找小于limit和XOR最大值的元素列表的程序

假设我们有一个数字nums列表和一个查询列表,其中每个查询都包含[x,limit]。我们必须找到一个列表,以便对每个查询[x,limit],我们找到一个以数字表示的元素e,以使e≤limit且e XOR x最大化。如果没有这样的元素,则返回-1。

因此,如果输入类似于nums = [3,5,9]查询= [[4,6],[2,0]],那么对于第一个查询,输出将为[3,-1],我们可以使用2或4。3 ^ 4 = 7,而5 ^ 4 = 3,所以我们选择3产生更大的XOR。在第二个查询中,没有这样的数字小于或等于0,因此我们将其设置为-1。

范例(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]
猜你喜欢