Return all unique triplets [a, b, c] from nums with a + b + c = 0. The result must not contain duplicate triplets.
Sort, fix nums[i], then move lo and hi inward on the rest: a small sum moves lo right, a big sum moves hi left. Skip equal values to avoid duplicates.
1function threeSum(nums: number[]): number[][] {2nums.sort((a, b) => a - b);3const res: number[][] = [];4for (let i = 0; i < nums.length - 2; i++) {5if (nums[i] > 0) break;6if (i > 0 && nums[i] === nums[i - 1]) continue;7let lo = i + 1, hi = nums.length - 1;8while (lo < hi) {9const sum = nums[i] + nums[lo] + nums[hi];10if (sum < 0) lo++;11else if (sum > 0) hi--;12else {13res.push([nums[i], nums[lo], nums[hi]]);14while (lo < hi && nums[lo] === nums[lo + 1]) lo++;15while (lo < hi && nums[hi] === nums[hi - 1]) hi--;16lo++; hi--;17}18}19}20return res;21}
emptySort nums.
Space: play/pause · ←/→: step