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; };
相关文章推荐
- leetcode15: 3Sum
- leetcode15---3Sum
- leetcode-15 3sum
- leetcode 15 3Sum
- 3sum leetcode (15)
- 【leetcode 15】javascript 3Sum
- LeetCode#15* 3Sum && LeetCode#16 3Sum Closest && LeetCode#18 4Sum
- [leetcode 15] 3Sum
- LeetCode 15 3Sum
- 【一天一道LeetCode】#15 3Sum
- LeetCode15:3Sum
- [Leetcode] 15. 3Sum
- LeetCode #15 3Sum
- leetcode--1、15、167 2Sum、3sum
- Leetcode-15: 3Sum
- LeetCode(15)3Sum
- leetcode-15 3Sum
- 【一天一道LeetCode】#15 3Sum
- Leetcode 15 3sum
- LeetCode | 15. 3Sum(三数和为定值)