You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:完善Python代码实现数组中和为指定值的数对索引求和

解决两数之和数对的索引求和问题

嘿,我来帮你把现有代码改成符合需求的版本!你当前的代码能找到符合条件的数对,但没法拿到它们的索引并求和——这事儿不难调整,咱们一步步来。

首先,核心问题是:我们需要追踪元素的索引,而不是只拿元素本身。你的代码用itertools.combinations(arr, 2)生成的是元素组合,丢了索引信息,所以得换个思路,先生成索引的组合,再对应到元素上判断。

修改后的完整代码

from itertools import combinations

def pairwise(arr, n):
    index_sum = 0
    # 生成数组所有索引的两两组合(避免重复数对,比如(1,3)和(3,1)视为同一个)
    for idx_pair in combinations(range(len(arr)), 2):
        idx1, idx2 = idx_pair
        # 检查对应元素之和是否等于目标n
        if arr[idx1] + arr[idx2] == n:
            index_sum += idx1 + idx2
    return index_sum

# 测试示例
arr = [1, 4, 2, 3, 0, 5]
n = 7
print(pairwise(arr, n))  # 输出:11

代码解释

  • 用combinations(range(len(arr)), 2)生成所有不重复的索引对:因为数对是无序的(比如(4,3)和(3,4)是同一个有效数对),组合刚好能避免重复计算,符合需求。
  • 对每个索引对,取出对应元素判断和是否等于n,符合条件就把两个索引加到总和里。
  • 最后返回累计的索引总和,完美匹配示例的输出结果。

额外小提示

如果你的数组很大,用combinations的时间复杂度是O(n²),可能有点慢。这种情况下可以用哈希表(字典)来优化到O(n)时间:

def pairwise(arr, n):
    index_sum = 0
    num_index_map = {}
    for idx, num in enumerate(arr):
        complement = n - num
        if complement in num_index_map:
            # 把所有能和当前数配对的索引加进来
            index_sum += sum(num_index_map[complement]) + idx * len(num_index_map[complement])
        # 把当前数的索引存入字典(处理重复元素的情况)
        if num not in num_index_map:
            num_index_map[num] = []
        num_index_map[num].append(idx)
    return index_sum

这个版本适合处理大数组,还能正确应对数组里有重复元素的情况~

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:59:31