首先对数组进行排序,排序后固定第一个数字,然后通过双指针的形式找到另两个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
var threeSum = function (nums) { const result = []; nums.sort((a, b) => a - b); const len = nums.length; for (let i = 0; i < len - 2; i++) { if (i > 0 && nums[i] === nums[i - 1]) continue; let left = i + 1, right = len - 1; while (left < right) { const sum = nums[i] + nums[left] + nums[right]; if (sum === 0) { result.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 if (sum < 0) { left++; } else { right--; } } } return result; }; console.log(threeSum([-1,0,1,2,-1,-4])); console.log( threeSum([2, -3, 0, -2, -5, -5, -4, 1, 2, -2, 2, 0, 2, -4, 5, 5, -10]) );
|