题解 | #三数之和#代码贴出来,供大家参考
三数之和
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
/** *
- @param num int整型一维数组
- @return int整型二维数组 / /*
- @param {number[]} nums
- @return {number[][]} */
var threeSum = function(nums) {
// 对数组进行排序,如果nums[i]只要大于0。后面的数字都是大于0,就不存在三个数之和等于0的情况,帮助我们去重。
nums.sort((a, b) => {
return a - b;
})
let result = [];
for(let i = 0; i < nums.length; i++) {
// 固定nums[i]的值 查找是否有其他两个数字之和加上nums[i]等于0的
if (nums[i] > 0) {
return result;
}
// 跳过重复的值
if (i != 0 && nums[i] == nums[i - 1]) {
continue;
}
let left = i + 1;
let right = nums.length - 1;
// 利用此时的nums[i],去找值符合的的其他两个数字
while(left < right) {
let sum = nums[i] + nums[left] + nums[right];
if (sum == 0) {
// 找到了符合条件的数字
result.push([nums[i], nums[left], nums[right]]);
// 已经找到符合条件的结果了,此时的left指针和right指针应该移动一个位置
left++;
right--;
// 去重操作
while(nums[left] === nums[left - 1]) {
left++;
}
while(nums[right] === nums[right + 1]) {
right--;
}
}
if (sum > 0) {
right--;
}
if(sum < 0) {
left++;
}
}
}
return result;
};
module.exports = {
threeSum : threeSum
};