15. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
超出时间限制 /** * @param {number[]} nums * @return {number[][]} */ var threeSum = function(nums) { nums = nums.sort(function(a,b){return a-b}); let len = nums.length; let temp = []; let result = []; let a; for(let i =0;i<len;i++){ for(let j =i+1;j<len;j++){ for(let k =j+1;k<len;k++){ if(nums[i]+nums[j]+nums[k] === 0){ a = nums[i] +','+ nums[j] +','+ nums[k]; temp.push(a); } } } } temp = [... new Set(temp)]; for(let i=0;i<temp.length;i++){ result[i] =temp[i].split(','); } return result; };
以下为通过代码
/** * @param {number[]} nums * @return {number[][]} */ var threeSum = function(nums) { let len = nums.length; let arr = []; nums.sort(function(a, b) { return a - b }) for(let i = 0; i < len; i++) { if(i > 0 && nums[i] === nums[i - 1]) { continue; } let a = nums[i], l = i + 1, r = len - 1; while(l < r) { let b = nums[l], c = nums[r]; let sum = a + b + c; if(sum === 0) { arr.push([a,b,c]) } if(sum <= 0) { while(nums[l] === b){ l++ } } if(sum >= 0){ while(nums[r] === c){ r-- } } } } return arr; };