题解 | #数组中相加和为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
};