class Solution{
public:
vector<vector<int>> threeSum(vector<int>& nums)
{
sort(nums.begin(),nums.end());
vector<vector<int>> ans;
for(int k=0;k<nums.size();++k)
{
if(k>0&&nums[k]==nums[k-1])
continue; //去重
int i=k+1,j=nums.size()-1;
while(i<j)
{
if(nums[i]+nums[j]==-nums[k])
{
ans.push_back(vector<int>{nums[k],nums[i],nums[j]});
++i,--j;
while(i<j&&nums[i-1]==nums[i])
++i;//去重
while(i<j&&nums[j]==nums[j+1])
--j;//去重
}
else if(nums[i]+nums[j]<-nums[k])
{
++i; //双指针,当和小于0时,左边指针向右移动
}
else
{
--j; //当和大于0时,右边指针向左移动
}
}
}
return ans;
}
};