题解 | #三数之和#
三数之和
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(),num.end());
if(num.size()<3) return {};
if(num.size()==3 && num[0]+num[1]+num[2] == 0) return {num};
vector<vector<int>> res;
for(int i = 0;i<num.size();i++){
int l = i+1,r = num.size()-1;
while(l<r){
if(num[l]+num[r]<-1*num[i]) l++;
if(num[l]+num[r]>-1*num[i]) r--;
if(num[l]+num[r]==-1*num[i] && l<r) {
res.push_back({num[i],num[l],num[r]});
while (num[l] == num[l + 1] && l+1<r) l++;
while (num[r] == num[r - 1] && r-1>l) r--;
l++;
r--;
}
}
while (num[i] == num[i + 1] && i < num.size() - 2) i++;
}
return res;
}
};