美文网首页
LeetCode15.三数之和 JavaScript

LeetCode15.三数之和 JavaScript

作者: LHH大翰仔仔 | 来源:发表于2019-01-20 10:17 被阅读10次

    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

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