LeetCode 4Sum(四数之和)C++代码指定测试用例运行错误原因查询
LeetCode 4Sum问题运行时错误分析
核心运行时错误原因
- 空数组下标越界访问
你提供的测试用例中,nums数组的最大元素为9,四数之和的最大可能值为9*4=36,远小于目标值500,因此不存在符合条件的四元组,存储结果的ans数组是空的。你的代码在去重逻辑中没有判断ans是否为空,直接执行ans2.push_back(ans[0]);访问空数组的0下标,触发非法内存访问,直接导致运行时错误。
其他隐藏问题
- 整数溢出风险
代码中计算四数之和时直接用int类型存储结果:
int t = nums[i]+nums[j]+nums[start]+nums[end];
当数组元素值较大时,四个int类型数值相加的结果可能超出int的取值范围,导致溢出得到错误的比较值,触发逻辑错误,建议修改为:
long long t = (long long)nums[i] + nums[j] + nums[start] + nums[end];
- 去重逻辑效率极低
当前代码先存储所有可能的四元组,再整体排序去重,当存在大量重复元素时会占用极高的内存,甚至可能触发内存不足的问题。可以在遍历i、j、移动双指针的过程中直接跳过和前一位相同的元素,提前过滤重复结果,大幅降低内存占用和运行耗时。
快速修复方案
在去重逻辑前增加空数组判断即可解决本次运行时错误:
sort(begin(ans),end(ans)); n = ans.size(); if(n == 0) return {}; // 新增空判断,避免空数组访问 vector<vector<int>> ans2; ans2.push_back(ans[0]);
内容的提问来源于stack exchange,提问作者Anurag Ahirwar
相关产品推荐
相关产品推荐

