题解 | #数组中相加和为0的三元组#

数组中相加和为0的三元组

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

/**
 * 
 * @param num int整型一维数组 
 * @return int整型二维数组
 */

//三指针两重循环,先排序,一个指针以每个数为-target,另外两个指针遍历找等于target的另外两个数
//注意js对数字进行排序的写法!!!
function threeSum( num ) {
    if(num.length<3) return [];
    
    num.sort(function(a, b){return a-b});//排序,注意写法!!!
    
    let res=[];
    let target,left,right,sum;
    for(let i=0;i<num.length-2;i++){
        while(i>0&&num[i]===num[i-1])  i++;//target去重。这里必须是跟i-1比较,不然会漏掉一些结果
        
        target=-num[i];//确定target
        left=i+1,right=num.length-1;
        
        while(left<right){//根据target找另外两个数
            sum=num[left]+num[right];
            if(sum===target){//找到了
                res.push([-target,num[left],num[right]]);
                
                while(left<right&&num[left]===num[left+1]){//找到了还要继续往后找,但要去重
                    left++;
                }
                left++;
            }
            else{//没找到
                sum>target?right--:left++;
            }
        }
    }
    return res;
}
module.exports = {
    threeSum : threeSum
};
全部评论

相关推荐

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

创作者周榜

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