文章目录
- 题目描述
- 法一 双指针+排序
题目描述
法一 双指针+排序
class Solution{
public:
vector<vector<int>> threeSum(vector<int>& nums){
int n=nums.size();
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
for(int first=0;first<n;first++){
if(first>0 && nums[first]==nums[first-1]){ //需要和上次枚举的数不同
continue;
}
int third=n-1; //c对应的指针指向数组的最右端
int target = -nums[first];
for(int second=first+1;second<n;second++){
if(second>first+1 && nums[second]==nums[second-1]){ //需要和上次枚举的数不同
continue;
}
while(second<third && nums[second]+nums[third]>target){ // 需要保证 b 的指针在 c 的指针的左侧
third--;
}
if(second==third){ // 指针重合,退出循环
break;
}
if(nums[second]+nums[third]==target){
ans.push_back({nums[first], nums[second], nums[third]});
}
}
}
return ans;
}
};