文章目录
- 题目描述
- 法一 双指针+排序
题目描述
法一 双指针+排序
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;}
};