给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
解题思路
代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
set<vector<int>> S;
vector<vector<int>> res;
int N = nums.size();
for(int i = 0 ; i < N-2 ; i++)
{
if(nums[i] > 0) break;
if(i > 0 && nums[i] == nums[i-1]) continue;
int target = -nums[i];
int leftGuard = i+1;
int rightGuard = N-1;
while(leftGuard < rightGuard)
{
if(target == nums[leftGuard] + nums[rightGuard])
{
S.insert({nums[i], nums[leftGuard], nums[rightGuard]});
while(leftGuard < rightGuard && nums[leftGuard] == nums[leftGuard+1]) leftGuard++;
while(leftGuard < rightGuard && nums[rightGuard] == nums[rightGuard-1]) rightGuard--;
leftGuard++;
rightGuard--;
}
else if(nums[leftGuard] + nums[rightGuard] > target) rightGuard--;
else leftGuard++;
}
}
for(auto it : S)
{
res.push_back(it);
}
return res;
}
};