要求:rt
思路:固定一个,双指针,O(n2)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
vector<vector<int>> res;
for(int i=0;i<n-2;++i){
int l=i+1,r=n-1;
if(nums[i]>0)break;
if(i>0&&nums[i]==nums[i-1])continue;
while(l<r){
int sum=nums[i]+nums[l]+nums[r];
if(sum==0){
res.push_back({nums[i],nums[l],nums[r]});
while(l<r&&nums[l]==nums[++l]);
while(l<r&&nums[r]==nums[--r]);
}
else if(sum>0)--r;
else ++l;
}
}
return res;
}
};