解题思路
这道题大体的思路是和LeetCode第16题是一致的,利用三指针法,
最主要的差别是去重操作。我们要对i,l,r进行去重操作。
相关代码
class Solution {
public:
vector<vector<int>> a;
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(nums[i]>0) break;
//对i进行去重操作
while(i-1>=0&&i<nums.size()&&nums[i]==nums[i-1]){
i++;
}
if(i>=nums.size()) break;
int l=i+1,r=nums.size()-1;
while(l<r){
if(nums[i]+nums[l]+nums[r]==0){
a.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>=1) r--;
l++;
r--;
}
else if(nums[i]+nums[l]+nums[r]>0){
r--;
}
else if(nums[i]+nums[l]+nums[r]<0){
l++;
}
}
}
return a;
}
};