题解 | #缺失的第一个正整数#
三数之和
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
};