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 38 39 40 41 42 43 44 45 46 47
| function threeSum(nums: number[]): number[][] { const len = nums.length; const res = []; if(len < 3) { return res }
nums.sort((a, b) => a - b)
for(let i = 0; i < len -2; i++){ if(nums[i] > 0){ break; }
if(i && nums[i] === nums[i-1]){ continue; }
let left = i + 1; let right = len -1
while(left < right){ const sum = nums[i] + nums[left] + nums[right] if(sum === 0){ res.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){ right -- } else { left++ } } }
return res }
|