力扣15.三数之和(双指针)
15. 三数之和 - 力扣(LeetCode)
代码区:
class Solution {
public:
//不可以包含重复的三元组
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> vv;
if(nums.size()<3){
return vv;
}
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(i>0&&nums[i]==nums[i-1]){//跳过重复的第一个元素
continue;
}
int target=-nums[i];
int left=i+1;
int right=nums.size()-1;
while(left<right){
int sum=nums[left]+nums[right];
if(sum==target){
vv.push_back({nums[i],nums[left],nums[right]});
//跳过重复的第二个元素
while (left < right && nums[left] == nums[left + 1]) {
left++;
}
// 跳过重复的第三个元素
while (left < right && nums[right] == nums[right - 1]) {
right--;
}
left++;
right--;
}
else if(sum<target){
left++;
}
else{
right--;
}
}
}
return vv;
}
};
欢迎各位读者提出意见。
(菜菜奋斗小日记)