给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
思路和代码:首先对数组进行排序,先确定中间值,然后使用双指针,从0和nums.size()-1开始依次夹击扫描。
class Solution {
public:
set<vector<int>> ans;
vector<vector<int>> threeSum(vector<int>& nums) {
if(nums.size() < 3) return {};
int sum = 0;
sort(nums.begin(),nums.end());
for(int c = 1, l, r; c < nums.size() - 1; c ++){
l = 0;
r = nums.size() - 1;
while(l < c && r > c){
sum = nums[l] + nums[c] + nums[r];
if(sum == 0){
ans.insert({nums[l],nums[c],nums[r]});
r--;
if(nums[l] == nums[r]) break;
}
else if(sum < 0) l++;
else if(sum > 0) r--;
}
}
return vector<vector<int>>(ans.begin(),ans.end());
}
};