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。 - 去重阶段逻辑完全错误:
pop_back()函数只会删除数组的最后一个元素,不会删除你找到的位于i或j位置的重复元素,因此即使你检测到了重复值,也删错了对象,导致重复值仍然保留,比如你的输出中仍然有重复的5、89、85。- 循环过程中你不断调用
pop_back()缩短数组长度,循环判断条件i<result.size()和j<result.size()会动态变化,导致大量位于数组后半段的合法结果被误删,比如预期输出中的6、88、0、79都位于初始收集的result的后半段,直接被无意义的pop_back()操作删除,没有出现在最终输出中。
内容的提问来源于stack exchange,提问作者Shivam Singh
相关产品推荐
相关产品推荐

