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;
}
};