一、题意
二、思考过程
哈希解法
使用两层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; }
};