美文网首页
js 数组中三个元素之和为零 输出不重复的可能

js 数组中三个元素之和为零 输出不重复的可能

作者: 牛奶大泡芙 | 来源:发表于2020-04-26 23:31 被阅读0次

这是一个比较经典的题目了,首先在函数的主体内用了dfs的方法,并通过“ i > indexs[x]”来限制重复结果的出现,这样仍然可能出现重复的结果比如这种情况:

[-1,-1,-1,2]

就是结果中的元素出现了冗余 重复多次,于是用了strings记录每个结果的“sort-->tostring”形式,这样可以避免重复结果的出现。
目前这个方案还存在优化空间,欢迎指正ou~

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var inner = function (x, y) {
    if (x < y) {
        return 1;
    } else if (x > y) {
        return -1;
    } else {
        return 0;
    }
}
var make = function(strings, newone) {
    var n = newone.concat();
    n.sort(inner);
    var s = n.join('');
    if (strings.length === 0 || strings.indexOf(s) === -1) {
        strings.push(s);
        return true;
    }
    return false;
}
var dfs = function(nums, state, chain, res, indexs, strings) {
    var n = nums.length;
    if (chain.length === 3) {
        if((chain[0] + chain[1] + chain[2] === 0)){
            if(make(strings, chain)) {
                var cp = chain.concat();
                res.push(cp);
            }   
        }
        return;
    }
    var x = indexs.length-1
    for (var i = 0; i<n; i++) {
        var p = nums[i];
        if(state[i] && i > indexs[x]) {
            chain.push(p);
            indexs.push(i);
            state[i] = false;
            dfs(nums, state, chain, res, indexs, strings);
            state[i] = true;
            chain.pop();
            indexs.pop()
        }
    }
}
var threeSum = function(nums) {
    var res = [];
    var state = [];
    var strings = [];
    for(var j = 0; j<nums.length; j++){
        state.push(true);
    }
    dfs(nums, state, [], res, [-1], strings);
    return res;
};

点个小心心再走吧❥(^_-)

相关文章

  • js 数组中三个元素之和为零 输出不重复的可能

    这是一个比较经典的题目了,首先在函数的主体内用了dfs的方法,并通过“ i > indexs[x]”来限制重复结果...

  • 算法精选题总结之数组类

    1.判断数组中三数之和2.判断数组中最接近的三数之和3.排序数组中剔除重复的数4.数组序列字典序下一个排列5.旋转...

  • PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的...

  • PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的...

  • js笔记

    js数组 删除某个元素 js数组是否含有某个元素 判断value为undefined cookie操作

  • 最大子数组之和

    问题: 输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组。 描述: 输入的数组为1...

  • 前端JS:判断list(数组)中的json对象是否重复

    js 删除数组json中重复的元素或者对象 结果:

  • 数组中随机取出N个重复或不重复的元素

    1.数组中随机取出三个元素(有可能重复) 2.数组中随机取出不重复的三个元素,NSMutableSet中无论怎么添...

  • 398. 随机数索引 - 每日一题

    给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给...

  • php函数array_combine

    通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值: 案例: 输出结果:

网友评论

      本文标题:js 数组中三个元素之和为零 输出不重复的可能

      本文链接:https://www.haomeiwen.com/subject/hczswhtx.html