(1)排序,双指针
class Solution {
private:
vector<vector<int>> vec;
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
for(int i=0;i<n;i++) {
if(nums[i]>0) return vec;
if(i>0 && nums[i]==nums[i-1]) continue;
int left=i+1;
int right=n-1;
while(left<right) {
if(nums[left]+nums[right]>-nums[i]) right--;
else if(nums[left]+nums[right]<-nums[i]) left++;
else {
vec.push_back({nums[i],nums[left],nums[right]});
left++;
right--;
while(left<right && nums[left]==nums[left-1]) left++;
while(left<right && nums[right]==nums[right+1]) right--;
}
}
}
return vec;
}
};