【问题标题】:count all pairs with given xor range (0-k)计算给定异或范围(0-k)的所有对
【发布时间】:2020-12-31 06:44:28
【问题描述】:

给定一个大小为n 的数组A 和一个整数k,我们如何计算从0k 的每个x 的对数(A[i], A[j]) 这样i < jA[i] XOR A[j] = x?

例如,给定数组A = [1, 2, 3]k = 2,有

0 pairs with XOR 0
1 pair with XOR 1 (2 XOR 3)
1 pair with XOR 2 (1 XOR 3),

所以结果是[0, 1, 1]

我有一个O(n^2) 解决方案,但我正在寻找一个更有效的解决方案。

【问题讨论】:

  • xor 2 是什么意思? k在这里的作用是什么?抱歉不明白你的问题。
  • @srv236 1 xor 3 给出 2 。 xor 2 是 1xor3 的结果。
  • 而k的作用是我们需要为从0到k的每一个数字找到结果,这就是为什么输出是0 1 1
  • 如果您分享当前的实现,可能有助于理解任务和问题。
  • 这是对 StackOverflow 社区的滥用,因为这个问题是 HackerEarth Vimeo 全栈开发人员招聘挑战赛,有效期至 2020 年 9 月 13 日。

标签: algorithm bit-manipulation xor


【解决方案1】:

CA的频率,即C[x] = count(A[i] == x)

那么问题就变成了CC的异或卷积,并从索引0的结果中减去len(A),因为它包含对(i,j),其中i==j

而异或卷积可以通过Fast Walsh–Hadamard transform解决,见this answer

最后,复杂度是O(n + m log m),其中mlen(C),等于max(A)

【讨论】:

  • 挑战结束的任何方式。没有什么能阻止我发布这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多