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

三数之和

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
};
全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务