题目描述
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
注意:
- 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
- 解集中不能包含重复的三元组。
例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20)
双指针问题
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(), num.end());
vector<vector<int>> res;
if(num.size()<3) return res;
for(int i=0;i<num.size()-2;i++){
int l = i+1;
int r = num.size() - 1;
while(l<r){
while(l<r && num[i]+num[l]+num[r]>0) r--;
if(l == r) break;
if(num[i]+num[l]+num[r] == 0){
res.push_back(vector<int> {num[i], num[l], num[r]});
while(l<r && num[l+1]==num[l]) l++;
}
l++;
}
while(i<num.size()-1 && num[i+1]==num[i]) i++;
}
return res;
}
};