15. 三数之和(双指针)
题目描述
leetcode - 15:https://leetcode-cn.com/problems/3sum/

解题关键
- 双指针(把
a+b+c=0化成 求-a=b+c)
代码
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
if(nums.size()<3) return ans;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
int start = i+1;
int end = nums.size()-1;
if( i>0 && nums[i]==nums[i-1]){
continue;
}
while(start<end){
if( nums[start]+nums[end]>-nums[i] ){
end--;
continue;
}else if( nums[start]+nums[end]<-nums[i] ){
start++;
continue;
}else if(nums[start]+nums[end]==-nums[i]){
if(start!=i+1&&nums[start]==nums[start-1]&&nums[end]==nums[end+1]){
start++;
end--;
continue;
}
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[start]);
tmp.push_back(nums[end]);
ans.push_back(tmp);
end--;
start++;
}
}
}
return ans;
}

浙公网安备 33010602011771号