双指针问题
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
static bool cmp(int a, int b)
{
return a<b;
}
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> vv;
if(nums.size()<3) return vv;
sort(nums.begin(), nums.end(), cmp);
vector<int> l;
int i(0),j,k,prei=INT_MAX,prej=INT_MAX,n=nums.size(),sum;
pair<int,int>pre=make_pair(INT_MAX,INT_MAX);
while(i<n&&nums[i]<=0)
{
while(i<n&&nums[i]==prei)
{
++i;
}
if(i==n)
{
break;
}
j=i+1;
k=n-1;
prej = INT_MAX;
while(j<k)
{
sum=nums[j]+nums[k];
if(nums[i]==-sum)
{
if(prej!=nums[j])
{
l.clear();
l.push_back(nums[i]);
l.push_back(nums[j]);
l.push_back(nums[k]);
vv.push_back(l);
prej=nums[j];
}
++j;
}else if(sum>-nums[i])
{
--k;
}else{
++j;
}
}
prei=nums[i++];
}
return vv;
}
};