15. 三数之和(JS实现)

1 题目

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

2 思路

这道题参考了题解,利用了排序 + 双指针 + 散列表去重,折腾了一晚上

3代码

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    var result = [];
    var map = {};
    var value;
    var left, right;
    var sum;
    nums.sort(function(a,b){
        return a-b;
    });

    if (nums[0] > 0 || nums[nums.length-1] < 0) return result;

    for (var i=0; i<nums.length; i++){
        left = i+1;
        right = nums.length - 1;
        while(left < right) {
            sum = nums[i] + nums[left] + nums[right];
            if (sum === 0) {
                var key = '' + nums[i] + nums[left] + nums[right];
                if (!map[key]) result.push([nums[i], nums[left], nums[right]]);
                map[key] = true;
                left++;
                right--;
            } else if (sum < 0){
                left++;
            } else {
                right--;
            }
        }
    }

    return result;
};

猜你喜欢

转载自blog.csdn.net/zjw_python/article/details/106448960