Ruby's Louvre

每天学习一点点算法

导航

leetcode 15. 3Sum

function threeSum(nums) {
    nums.sort((a, b) => a - b);
    var res = [];

    if (nums.length < 3 || nums[0] > 0 || nums[nums.length - 1] < 0) {
        return res;
    }
    for (var i = 0; i < nums.length; i++) {
        if (i > 0 && nums[i] == nums[i - 1]) {
            continue;
        }
        twoSum(nums, i, res);
    }
   // console.log(res);
    return res;
}
function twoSum(nums, start, res) {
    var l = start + 1,
        r = nums.length - 1;
    while (l < r) {
        var sum = nums[start] + nums[l] + nums[r];
        if (sum == 0) {
            var temp = [nums[start], nums[l], nums[r]];
            res.push(temp);

            //去重
            while (l < r && nums[l] == nums[l + 1]) l++;
            while (l < r && nums[r] == nums[r - 1]) r--;

            l++;
            r--;
        } else if (sum > 0) {
            r--;
        } else if (sum < 0) {
            l++;
        }
    }
}

posted on 2019-12-14 23:35  司徒正美  阅读(212)  评论(0编辑  收藏  举报