给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
思路:首先想到的是排序数组两数之和等于target的判断方法,这个题明显是两数之和的变形,所以先要将它变成排序数组,然后取出第一个数,在剩下的数里面找出两数之和等于第一个数的相反数,这样三个数之和就等于0。需要注意的地方是:如果取出的下一个数和当前数相等则跳过它,因为这样得出的结果将会重复。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
if(nums.size()<3) return res;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-2;++i){
int l=i+1;
int r=nums.size()-1;
while(l<r){
if(nums[i]+nums[l]+nums[r]==0){
res.push_back({nums[i],nums[l],nums[r]});
l++;
r--;
while(nums[r]==nums[r+1]) --r;
while(nums[l]==nums[l-1]) ++l;
} else if(nums[i]+nums[l]+nums[r]<0){
l++;
} else {
r--;
}
}
while(i<nums.size()-2&&nums[i]==nums[i+1]) i++;
}
return res;
}
};