class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
// 第一个,第二个,第三个都不能重复
// 排序加双指针
vector<vector<int>> res;
sort(nums.begin(), nums.end());
// 固定首元素
for(int i = 0; i < nums.size(); i++){
// i 要去重
if(nums[i] > 0){
break;
}
if (i > 0 && nums[i] == nums[i-1]){
continue;
}
// 双指针
int left = i + 1;
int right = nums.size()-1;
while(left < right){
if(nums[i] + nums[left] + nums[right] == 0){
vector<int> tmp = {nums[i], nums[left], nums[right]};
res.push_back(tmp);
while(left < right && nums[left] == nums[left+1]){
left++;
}
while(left < right && nums[right] == nums[right-1]){
right--;
}
right--;
left++;
}
else if(nums[i] + nums[left] + nums[right] < 0){
left++;
}
else{
right--;
}
}
}
return res;
}
};
我们的目的不是说出代码的思路,而是写出bug free的代码