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

如何调整双数求和代码 实现从列表中找出和为目标值的三个数

三数之和功能调整方案

原两数之和代码存在两处可先修正的问题:

  1. 变量名不统一:定义的列表变量是numbers,循环中错误使用了未定义的invoices
  2. 语法错误:匹配到结果的输出逻辑括号不完整,缺少print关键字

调整思路

完全基于你现有两数之和的逻辑做最小改动,不需要调整核心匹配规则:

  • 新增外层循环固定第一个数的位置,计算「目标值减去第一个数」的剩余差值,作为后续两数之和的匹配目标
  • 内层复用原有的两数之和逻辑,仅在第一个数之后的子数组中搜索,避免重复匹配相同的组合
  • 匹配到符合条件的三个数后直接输出并终止循环,遍历完所有组合没有结果则输出无解决方案

完整可运行代码

numbers = [2, 4, 6, 8, 10]
target_number = 12

# 外层循环固定第一个数,最多遍历到倒数第三个元素即可,预留两个位置给后两个数
for i, first_num in enumerate(numbers[:-2]):
    # 剩余两个数需要凑的目标值
    remaining_target = target_number - first_num
    # 内层循环在i之后的子数组找两数之和等于remaining_target
    for j, second_num in enumerate(numbers[i+1:-1]):
        complementary = remaining_target - second_num
        # 第三个值要在第二个数的后面位置搜索,避免重复
        if complementary in numbers[i+j+2:]:
            print(f"找到符合条件的三个数:{first_num}, {second_num}, {complementary}")
            # 只需要找第一个结果就加break,需要找所有组合可以删掉break用列表存结果
            break
    else:
        # 内层循环没找到匹配,继续外层下一轮
        continue
    # 内层找到结果,跳出外层循环
    break
else:
    print("No solutions exist")

运行说明

上述代码针对你给出的测试用例运行后,会输出找到符合条件的三个数:2, 4, 6,符合预期。如果需要更高的执行效率,可引入排序+双指针的优化方案,将时间复杂度从暴力匹配的O(n³)降到O(n²)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:27:02