class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<n-2;i++){
if(nums[i]>0) break; //结束循环
if(i>=1&&nums[i]==nums[i-1]) continue; //去重
int L=i+1;
int R=n-1;
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+1]) L++; //去重
while(L<R&&nums[R]==nums[R-1]) R--; //去重
L++;
R--;
}
else if(sum<0) L++;
else R--;
}
}
return res;
}
};
参考链接:
https://leetcode-cn.com/problems/3sum/solution/hua-jie-suan-fa-15-san-shu-zhi-he-by-guanpengchn/
https://leetcode-cn.com/problems/3sum/solution/pai-xu-liang-zhi-zhen-jie-fa-by-superman-ab20/
排序,先固定一个nums[i], 双指针分别为nums[i]右侧的两端,遇到满足的加入,
res.push_back({nums[i],nums[L],nums[R]});
注意去重操作