【LeetCode 15】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;
}

};


目录
相关文章
|
1月前
【LeetCode 16】15.三数之和(双指针法)
【LeetCode 16】15.三数之和(双指针法)
30 1
|
3月前
|
算法
LeetCode第15题三数之和
该文章介绍了 LeetCode 第 15 题三数之和的解法,通过先对数组排序,使用双指针减少循环层数,依次取一个元素作为第一个元素,通过双指针法寻找符合条件的三元组,并进行去重处理,同时总结了 2 数之和可使用哈希表解决,超过 2 数之和可使用双指针减少循环次数。
LeetCode第15题三数之和
|
5月前
|
算法 容器
【LeetCode刷题】三数之和、四数之和
【LeetCode刷题】三数之和、四数之和
|
6月前
|
Java C++ Python
leetcode-15:三数之和
leetcode-15:三数之和
39 0
|
6月前
|
Java
leetcode-53:最大子序和
leetcode-53:最大子序和
36 0
|
存储 测试技术 C++
力扣1-两数之和&力扣15-三数之和
力扣1-两数之和&力扣15-三数之和
80 0
|
存储
每日一题——三数之和(双指针)
每日一题——三数之和(双指针)
|
算法 测试技术
leetcode:15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
78 0
每日一题——四数之和(双指针解法)
每日一题——四数之和(双指针解法)
|
测试技术 索引
leetcode_15. 三数之和
题目链接: 15. 三数之和 据说华为的机试经常考这题,而且这道题也是扩展性极强的一道题,你可以看到18. 四数之和,或者人为修改的五数之和,六数之和,乃至n 数之和,也就是
leetcode_15. 三数之和