版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33765907/article/details/82288200
Given an array nums
of n integers, are there elements a, b, c in nums
such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
int size = nums.size();
if(size <= 2) return result;
sort(nums.begin(), nums.end());
for(int i = 0; i < size - 2; i++) {
int a = nums[i];
if(a > 0) break; // 最小的a>0,直接退出
if(i > 0 && a == nums[i - 1]) continue; // 此数字为a,上一次循环已考虑过,不能重复
for(int j = i + 1, k = size - 1; j < k;) {
int b = nums[j], c = nums[k];
int value = a + b + c;
if(value == 0) {
result.push_back(vector<int>{a, b, c});
while(b == nums[j]) j++; // 为了避免重复数字
while(c == nums[k]) k--;
} else if(value > 0) { // 正数过大
k--;
} else { // 正数过小
j++;
}
}
}
return result;
}
};