{ array: number[] }
1sort(nums) → [-4, -1, -1, 0, 1, 2]2for i = 0 to n-3: → i = 0 (nums[i]=-4)3 if i > 0 and nums[i] == nums[i-1]: skip4 left = i+1, right = n-1 → left = 1, right = 55 while left < right:6 sum = nums[i] + nums[left] + nums[right] = -4+-1+2 = -37 if sum == 0: record triplet, move left/right8 else if sum < 0: left++9 else: right--
1function threeSum(nums: number[]): number[][] {2 nums.sort((a, b) => a - b);3 const result: number[][] = [];4 for (let i = 0; i < nums.length - 2; i++) {5 if (i > 0 && nums[i] === nums[i - 1]) continue;6 let left = i + 1, right = nums.length - 1;7 while (left < right) {8 const sum = nums[i] + nums[left] + nums[right];9 if (sum === 0) {10 result.push([nums[i], nums[left], nums[right]]);11 while (left < right && nums[left] === nums[left + 1]) left++;12 left++; right--;13 } else if (sum < 0) left++;14 else right--;15 }16 }17 return result;18}