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

LeetCode349两个数组的交集C++代码测试用例输出错误求助

LeetCode 349. 两个数组的交集 代码错误分析

你提交的代码如下:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector <int> result;
        for(int i=0;i<nums1.size(); i++){
            for(int j=0;j<nums2.size();j++){
                if(nums1[i] == nums2[j]){
                    result.push_back(nums1[i]);
                    break;
                }   
            }
        }
        for(int i=0;i<result.size();i++){
            for(int j=0;j<result.size();j++){
                if(result[i] == result[j] and i!=j){
                    result.pop_back();
                }
            }
        }
        return result;
    }
};

核心错误原因

  • 公共元素收集阶段未做去重判断:第一层双重循环逻辑只要检测到nums1的当前元素在nums2中存在,就直接加入结果数组,没有判断该元素是否已经被加入过result。如果nums1中存在多个相同、且同时在nums2中存在的元素,result初始就会出现重复值,比如测试用例中nums1出现了两次5,两次都匹配到nums2的5,因此初始收集的result里就有两个5。
  • 去重阶段逻辑完全错误:
    1. pop_back()函数只会删除数组的最后一个元素,不会删除你找到的位于i或j位置的重复元素,因此即使你检测到了重复值,也删错了对象,导致重复值仍然保留,比如你的输出中仍然有重复的5、89、85。
    2. 循环过程中你不断调用pop_back()缩短数组长度,循环判断条件i<result.size()和j<result.size()会动态变化,导致大量位于数组后半段的合法结果被误删,比如预期输出中的6、88、0、79都位于初始收集的result的后半段,直接被无意义的pop_back()操作删除,没有出现在最终输出中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03