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; } };