此处将i固定住,然后移动j和k,如果三个数相加大于target,k左移,如果小于target,那么j右移,否则就把三个数存起来。(注意要避开相同的数字,因为此处是先排序再进项下面的操作,那就要对连续相同的数字进行一定的跳过操作。)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int target=0;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(i>0&&nums[i]==nums[i-1])
continue;
for(int j=i+1,k=nums.size()-1;j<k;){
int sum=nums[i]+nums[j]+nums[k];
if(sum<target){
j++;
}else if(sum>target){
k--;
}else{
vector<int> a(3,nums[i]);
a[1]=nums[j++];
a[2]=nums[k--];//下一个
res.push_back(a);
while(j<k&&nums[j]==nums[j-1]) j++;
while(k>j&&nums[k]==nums[k+1]) k--;
}
}
}
return res;
}
};