题目:原题
思路:
先排序,枚举第一维,然后用双指针。
如果大于目标值,右指针减
如果小于目标值,左指针加
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
vector<vector<int>> ans;
for(int first=0;first<n;first++){
if(first>0&&nums[first]==nums[first-1]) continue;
int target=-nums[first];
int third=n-1;
for(int second=first+1;second<n;second++){
if(second>first+1&&nums[second]==nums[second-1]) continue;
while(third>second&&nums[third]+nums[second]>target) third--;
if(third==second) break;
if(nums[third]+nums[second]==target){
ans.push_back({nums[first],nums[second],nums[third]});
}
}
}
return ans;
}
};