题目:给定一个数组,在数组中寻找所有相加等于0的三个数,三个数输出顺序为升序。
思路:首先将数组排序,然后依次固定每个值a[i],在a[i+1]到a[n-1]寻找两个数之和等于-a[i]。注意当下一迭代a[i+1]=a[i]时,则跳过a[i+1]。
class Solution {
private:
vector<vector<int> > result;
int flag=1;
public:
vector<vector<int> > threeSum(vector<int> &num){
result.clear();
int length1=num.size();
sort(num.begin(),num.end());
for(int i=0;i<length1;i++){
if(i>0&&num[i]==num[i-1]){
continue;
}
int j,k;
j=i+1;
k=length1-1;
while(j<k){
if(j>i+1&&num[j]==num[j-1]){
j++;
continue;
}
if(k<length1-1&&num[k]==num[k+1]){
k--;
continue;
}
int sum=num[i]+num[j]+num[k];
if(sum>0){
k--;
}
else if(sum<0){
j++;
}
else{
vector<int> a;
a.push_back(num[i]);
a.push_back(num[j]);
a.push_back(num[k]);
result.push_back(a);
j++;
}
}
}
return result;
}
};