题目见链接:
力扣https://leetcode-cn.com/problems/3sum/
提交代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int n = nums.size();
if(n<3){
return {};
}
set<vector<int>> resSet;
sort(nums.begin(), nums.end());
for(int i = 0; i<n-2; i++){
if(nums[i]>0){
break;
}
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int start = i+1;
int end = n-1;
while(start<end){
if(nums[start]+nums[i]+nums[end]>0){
end--;
}
else if(nums[start]+nums[i]+nums[end]<0){
start++;
}
else if(nums[start]+nums[i]+nums[end]==0){
resSet.insert(vector<int>{nums[start], nums[i], nums[end]});
while(start<end && nums[end]==nums[end-1]) end--;
while(start<end && nums[start]==nums[start+1]) start--;
start++;
end--;
}
}
}
return vector<vector<int>> (resSet.begin(), resSet.end());
}
};
运行结果:
个人总结:
怎么去重是这个题目的难点,在很多题目都有应用。