您的位置:首页 > 其它

leetcode 15 3sum

2018-01-05 20:26 351 查看


leetcode 15,大概就是给一个若干整数组成的数组,求出其中3个的和为0的组数。

思路:

遍历每一个数字,寻找与这个数字外的另两个的数字的和为0.有几个小地方优化下就能过了

/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function (nums) {
const length = nums.length;
const result = [],
results = {};
nums.sort((a, b) => a - b);//先对数组排序
for (let i = 0; i < length; i++) {
let left = i + 1, //这里的左端必须要从i+1开始,不仅可以减少比较的次数还能起到去重的作用
right = length - 1;
if (i > 0 && nums[i] === nums[i - 1]) {
continue; //这里是在[1,1,1,1,1]这种情况下只对一个1进行查找
}
while (left < right) {
if (left === i) {
left++;
continue;
}
if (right === i) {
right--;
continue;
}
let current = nums[i] + nums[left] + nums[right];
if (current === 0) {
let temp = [nums[i], nums[left], nums[right]]
result.push(temp)
//优化 也是避免了相同数字下的多次比较问题
let lefttemp = nums[left],
righttemp = nums[right];
while (left < right && lefttemp === nums[left]) {
left++;
}
while (left < right && righttemp === nums[right]) {
right--;
}
}
//前面的数组排序就是为了下面这里
if (current > 0) {
right--;//和大于0就右边的减减,这样和才会减少
}
if (current < 0) {
left++;
}
}
}
return result;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: