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

LeetCode两数之和代码中嵌套循环if内break未按预期工作的原因是什么

Two Sum问题C++代码break未生效原因解析

问题复现代码

C++问题代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> output{};
        for(int i = 0; i < nums.size(); i++){
            for(int j = 0; j < nums.size(); j++){
                if (nums[i] + nums[j] == target && i - j != 0){
                    output.push_back(i);
                    output.push_back(j);
                    break;
                }
            }
        }
        return output;
    }
};

Python参考代码

class Solution(object):
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            for j in range(len(nums)):
                if nums[i] + nums[j] == target and i - j != 0:
                    return [i, j]
                    break
                else:
                    continue

核心原因解释

  • C++代码中的break关键字仅能终止当前所在的内层循环,不会终止外层的i循环。
    当输入为nums = [3,2,4]、target = 6时:
    1. 第一轮外层循环i=1,内层j遍历到2时满足判断条件,向output插入1和2,break跳出内层循环,但外层i循环还会继续执行。
    2. 后续外层循环i=2,内层j遍历到1时再次满足判断条件,向output插入2和1,最终返回的数组就是[1,2,2,1]。
  • Python代码和C++代码的逻辑并不完全等价:Python代码满足条件时首先执行的是return [i, j],return会直接终止整个函数的执行,后续的break永远不会被触发,只要找到第一组符合条件的下标就会直接返回结果,所以输出正常。

补充说明

你提到的将内层循环改为j = i + 1的改法,既可以避免重复判断同一对下标的正反顺序,减少无效计算,也能从根源上避免重复插入结果的问题,是更合理的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:06:03