LeetCode15.三数之和 JavaScript

雾凇高阶
• 阅读 2249

LeetCode15.三数之和 JavaScript

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]]

答案参考:

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    var result = new Array();
    var len = nums.length;
    var flag = 0;
    var hash = {};
    nums.sort((a, b) => {
        return a-b;
    });
    if(nums[0] > 0 || nums[len - 1] < 0) return result;
    for(var i = 0; i < len; i++){
        if(nums[i] === nums[i-1]) continue;
        flag = 0 - nums[i];
        var start = i + 1, end = len - 1;
        while(start < end){
            var middle = new Array();
            if(nums[start] + nums[end] < flag){
                start ++;
            } else if(nums[start] + nums[end] > flag){
                end--;
            } else {
                middle.push(nums[i]);
                middle.push(nums[start]);
                middle.push(nums[end]);
                if(!hash[middle]){
                    hash[middle] = true;
                    result.push(middle);
                }
                start += 1;
                end -= 1;
                while(start < end && nums[start] === nums[start - 1]){
                    start += 1;
                }
                while(start < end && nums[end] === nums[end + 1]){
                    end -= 1;
                }
            }
        }
    }
    return result;   
};

LeetCode15.三数之和 JavaScript

点赞
收藏
评论区
推荐文章
Chase620 Chase620
4年前
js异步的5种样式
js异步的5种样式1.定时器2.AJAX3.Promise4.Generator5.asyns和awite 1.定时器  setTimeout():延时器    可以传入三个分别是      1)code:必
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
DaLongggggg DaLongggggg
4年前
python-算法训练 区间k大数查询
问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式总共输出m行,每行一个数
Wesley13 Wesley13
3年前
VSCode配置FiraCode和更纱黑体字体
!(https://oscimg.oschina.net/oscnet/c7bb62d935ceb01d3b7fe176322e84ae00d.png)Fira Code下载到FiraCode字体的GitHub(https://www.oschina.net/action/GoToLink?urlhttps%
Stella981 Stella981
3年前
JavaScript的 基本数据类型
第一:Javascript对象是第二:Javascript中第三:Javascript的对象是数据;第四:JavaScript中的对象可以简单理解成"名称:值"对(name:value)。名称(name):"名称"部分是一个JavaScript字符串参考https://www
Stella981 Stella981
3年前
JavaScript中判断数组是否包含某个元素
javascript的Array没有contains方法,有时候这会不方便,contains方法实现很简单可以扩展Array类,如下:写法1.Array.prototype.containsfunction(obj){varithis.length;while(i){
Wesley13 Wesley13
3年前
4.python
一编写一个函数判断输入的三个数是否能构成三角形我写的函数defis_triangle(a,b,c):if(abcandabs(ab)<c)or(acbandabs(ac)<b)or(bcaandabs(bc)<a):return
Stella981 Stella981
3年前
Python递归函数、匿名函数、过滤函数
递归函数Python对递归的深度有限制,超过即会报错。所以一定一要注意跳出条件。斐波拉契数列一个数列,第一个数是1,第二个数也是1,从第三个数开始,每一个数是前两个数之和公式:f(1)1,f(2)1,f(3)f(1)f(2),...,f(n)f(n2)f(n1)
Wesley13 Wesley13
3年前
MySQL分组并取每组中create_time字段的最大值, 及这条记录的所有值(理解groupId, 很容易误导)
invest\_order\_code排查单号求获取排查单号相同数大于1的排查单号SELECTinvest_order_codeFROMt_invest_orderGROUPBYinvest_order_codeHAVINGCOUNT(invest_order_code)1求排查单未PC2019042909252998
达里尔 达里尔
1年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数
贾蔷 贾蔷
1星期前
洛谷P1102题解:利用哈希表优化的数对统计 C++代码解析
一、题目解读P1102题要求处理一组整数与常数C,统计数组中是否存在元素A与B满足ABC。用户需输出满足条件的数对数量。题目关键在于快速判断是否存在互补元素,时间复杂度需优化以避免暴力遍历。二、解题思路采用(unorderedmap)实现高效统计。首先遍