在Python中计算给定范围内XOR的配对数量

在Python中计算给定范围内XOR的配对数量

假设我们有一个数组nums和两个值l和r,我们必须找到好对数的数量。 这里的好对数是一个对(i,j),其中0 <= i < j < nums大小且l <= (nums[i] XOR nums[j]) <= r。

因此,如果输入为nums = [4, 1, 7, 2],l = 2,r = 6,则输出将为6,因为好对数为(1,0):1 XOR 4 = 5,(1, 2):1 XOR 7 = 6,(1,3):1 XOR 2 = 3,(0,3):4 XOR 2 = 6,(0,2):4 XOR 7 = 3,(2,3):7 XOR 2 = 5。

要解决这个问题,我们将遵循以下步骤-

  • 定义一个函数test()。 这将获取nums,x

  • 计数:包含nums中元素频率的映射

  • res:0

  • 当x不为零时,执行以下操作

    • 如果x是奇数,则
      • res:为count中所有元素的和(count [a] * count [(x-1) XOR a] =所有计数中的a
    • 计数:将a / 2设置为值得计数a +计数[a XOR 1]的映射(对于所有元素a)

    • x = x / 2的商

  • 返回res / 2的商

  • 从主方法返回test(nums,r + 1) – test(nums,l)

例子

让我们看以下实现以更好地理解

  from collections import Counter
  def solve(nums, l, r):
    def test(nums, x):
      count = Counter(nums)
      res = 0
      while x:
        if x & 1:
          res += sum(count[a] * count[(x - 1) ^ a] for a in count)
        count = Counter ({a >> 1: count[a] + count[a ^ 1] for a in count})
        x >>= 1
      return res // 2
    return test(nums, r + 1) - test(nums, l)
  nums = [4,1,7,2]
  l = 2
  r = 6
  print(solve(nums, l, r))

输入

     [4, 1, 7, 2],2,6

输出

  6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程