题解 | #缺失的第一个正整数#

三数之和

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

/**
 * @param nums int整型一维数组 
 * @return int整型二维数组
 */
function threeSum( nums ) {
    let res = []
    let len = nums.length
    if(len < 3) return res
    nums.sort((a , b) => a -b)
    // 先定住一个数值,然后用双指针指向该数值之后的位置,计算这三个数的总和
    for(let i = 0 ; i < len ; i++){
        // 如果nums[i]大于0,则之后的数均大于零,结束循环
        if(nums[i] > 0) break
        // 从第二个数值开始,去重
        if(i > 0 && nums[i] === nums[i-1]) continue

        let [left , right] = [i+1 , len-1]
        while(left < right){
            let sum = nums[left] + nums[right] + nums[i]
            if(sum === 0) {
                // 将结果按顺序存入数组
                res.push([nums[i] , nums[left] , nums[right]])
                // 去重
                while(left < right && nums[left] === nums[left + 1]) left++
                while(left < right && nums[right] === nums[right + 1]) right--
                left++
                right--
            }else {
                sum > 0 ? right--:left++
            }
            
        }
    }
    return res
}

module.exports = {
    threeSum : threeSum
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务