题解 | #三数之和#代码贴出来,供大家参考

三数之和

http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

/** *

  • @param num int整型一维数组
  • @return int整型二维数组 / /*
  • @param {number[]} nums
  • @return {number[][]} */
var threeSum = function(nums) {
    // 对数组进行排序,如果nums[i]只要大于0。后面的数字都是大于0,就不存在三个数之和等于0的情况,帮助我们去重。
    nums.sort((a, b) => {
        return a - b;
    })
    let result = [];
    for(let i = 0; i < nums.length; i++) {
        // 固定nums[i]的值 查找是否有其他两个数字之和加上nums[i]等于0的
        if (nums[i] > 0) {
            return result;
        }
        // 跳过重复的值
        if (i != 0 && nums[i] == nums[i - 1]) {
            continue;
        }
        let left = i + 1;
        let right = nums.length - 1;
        // 利用此时的nums[i],去找值符合的的其他两个数字
        while(left < right) {
            let sum = nums[i] + nums[left] + nums[right];
            if (sum == 0) {
                // 找到了符合条件的数字
                result.push([nums[i], nums[left], nums[right]]);
                // 已经找到符合条件的结果了,此时的left指针和right指针应该移动一个位置
                left++;
                right--;
                // 去重操作
                while(nums[left] === nums[left - 1]) {
                    left++;
                }
                while(nums[right] === nums[right + 1]) {
                    right--;
                }
            }
            if (sum > 0) {
                right--;
            }
            if(sum < 0) {
                left++;
            }
        }
    }
    return result;
};
module.exports = {
    threeSum : threeSum
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务