优化版四数之和(4Sum)代码提交LeetCode遇运行时错误(Runtime Error)求助
优化版四数之和(4Sum)代码提交LeetCode遇运行时错误(Runtime Error)求助
大家好,我最近在解决四数之和的问题——给定一个整数数组和一个目标值,需要返回所有和等于目标值的不重复四元组。我在本地机器和几个在线编译器上测试了多个用例,结果都正确,但提交到LeetCode时,有一个特定的测试用例总是抛出运行时错误,我实在找不到问题所在,想请各位帮忙分析一下。
出问题的测试用例
输入:
4
0 0 0 0
1
预期输出:空数组(空的二维vector)
我本地运行这个用例时能得到正确的空结果,但LeetCode提交就报错,以下是我的完整代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std ; vector<vector<int>> four_sum(vector<int> &nums, int target) { // sorting the vector sort(nums.begin(),nums.end()) ; int len = nums.size() ; if (len < 4) { return {} ; } cout<<"Sorted Array is: "<<endl ; for (int i = 0; i < len; i++) { cout<<nums[i]<<" " ; } cout<<endl ; vector<int> temp ; vector<vector<int>> ans ; int sum = 0, curr_sum = 0 ; int i = 0, j = len-1 ; // a + b + c + d = target while (i < j) { if (i == 0 or j == len or (i > 0 and nums[i] != nums[i-1]) or (j < len and nums[j] != nums[j+1])) { sum = nums[i] + nums[j] ; int lo = i + 1, hi = j - 1 ; while (lo < hi) { if (nums[lo] + nums[hi] + sum == target) { temp.push_back(nums[i]) ; temp.push_back(nums[lo]) ; temp.push_back(nums[hi]) ; temp.push_back(nums[j]) ; ans.push_back(temp) ; temp.clear() ; curr_sum = target ; while (lo < hi and nums[lo] == nums[lo + 1]) { lo++ ; } while (lo < hi and nums[hi] == nums[hi - 1]) { hi-- ; } lo++ ; hi-- ; } else if (sum + nums[lo] + nums[hi] < target) { curr_sum = sum + nums[lo] + nums[hi] ; lo++ ; } else { curr_sum = sum + nums[lo] + nums[hi] ; hi-- ; } } } if (curr_sum < target) { i++ ; } else if (curr_sum == target) { i++ ; j-- ; } else { j-- ; } } return ans ; } int main() { int n, x ; cin>>n ; vector<int> nums ; while (n--) { cin>>x ; nums.push_back(x) ; } int target ; cin>>target ; vector<vector<int>> ans = four_sum(nums,target) ; cout<<"Ans: "<<endl ; for (int i = 0; i < ans.size(); i++) { for (int j = 0; j < ans[i].size(); j++) { cout<<ans[i][j]<<" " ; } cout<<endl ; } return 0 ; }
我已经检查了数组长度不足4的边界情况,也做了去重处理,但还是搞不懂为什么这个测试用例会在LeetCode上触发运行时错误,希望大家能帮我找出问题点!
备注:内容来源于stack exchange,提问作者Kartikey
相关产品推荐
相关产品推荐

