15.三数之和

文章目录

一、题意

【LeetCode 15】15.三数之和_三元组

二、思考过程

哈希解法

使用两层for循环就可以确定 a 和b 的数值,哈希法来确定 0-(a+b) 是否在 数组里出现过。

//找出a+b+c=0
//a=nums[i],b=nums[j],c=-(a+b)

三、完整代码

class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;//定义result二维向量
sort(nums.begin(),nums.end());//vector进行排序

//找出a+b+c=0
//a=nums[i],b=nums[j],c=-(a+b)
for(int i=0;i<nums.size();i++){
//排序之后如果第一个元素已经大于0,那么不可能凑成三元组
if(nums[i]>0){
continue;
}
if(i>0&&nums[i]==nums[i-1]){//去重操作
continue;
}

unordered_set<int> set;
for(int j=i+1;j<nums.size();j++){
//三元组元素b去重
if(j>i+2&&nums[j]==nums[j-1]&&nums[j-1]==nums[j-2]){
continue;
}
int c=0-(nums[i]+nums[j]);
if(set.find(c)!=set.end()){
result.push_back({nums[i],nums[j],c});
set.erase(c);//三元组元素c去重
}else{
set.insert(nums[j]);
}
}
}
return result;
}
};
    }
return result;
}

};