用 Python 编写程序来计算元素和为 2 的幂的索引对数量

pythonserver side programmingprogramming更新于 2025/12/24 20:28:17

假设我们有一个名为 nums 的数字列表。我们必须找到索引对 i, j 的数量,其中 i < j 使得 nums[i] + nums[j] 等于 2^k,其中 0 >= k。

因此,如果输入为 nums = [1, 2, 6, 3, 5],则输出为 3,因为有三对和,如 (6, 2):和为 8、(5, 3):和为 8 和 (1, 3) 和为 4

为了解决这个问题,我们将遵循以下步骤 −

  • res := 0

  • c := 包含每个元素频率的映射

  • 对于 nums 中的每个 x,执行

    • 对于 0 到 31 范围内的 j,执行

      • res := res + c[(2^j) - x]

    • c[x] := c[x] + 1

  • 返回 res

示例

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

from collections import Counter
def solve(nums):
   res, c = 0, Counter()
   for x in nums:
      for j in range(32):
         res += c[(1 << j) - x]
      c[x] += 1
   return res

nums = [1, 2, 6, 3, 5]
print(solve(nums))

输入

[1, 2, 6, 3, 5]

输出

3

相关文章


有用资源