【发布时间】:2021-07-30 10:30:15
【问题描述】:
我在 leetcode 上解决了这个 3Sum 问题。该问题指出: 给定一个整数数组 nums,返回所有三元组 [nums[i], nums[j], nums[k]] 使得 i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0。
注意解集不能包含重复的三元组。
我编写的这个解决方案是:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> arr;
sort(nums.begin(),nums.end());
for(int i=0;i<(nums.size())-2;i++)
{
if(i==0 || (i>0 && nums[i]!=nums[i-1]))
{
int low,high,sum;
low=i+1;
high=nums.size()-1;
sum=0-nums[i];
while(low<high)
{
int a=nums[low]+nums[high];
if(a== sum)
{
vector<int> p;
p.push_back(nums[i]);
p.push_back(nums[low]);
p.push_back(nums[high]);
arr.push_back(p);
while(low<high && nums[low]==nums[low+1])
low++;
while(low<high && nums[high]==nums[high-1])
high--;
low++;
high--;
}
else if(a>sum)
high--;
else
low++;
}
}
}
return arr;
}};
但是当给定向量的大小小于 3 时,它会显示基本条件的运行时错误。此外,for 循环的设计方式使其不会在基本条件下运行,即向量大小更小大于 3。
谁能告诉它为什么会显示这样的错误?
【问题讨论】:
标签: c++