function threeSum(nums: number[]): number[][] {
nums.sort((a, b) => a - b);
let size = nums.length;
const resNums: number[][] = [];
if (nums[0] > 0 || nums[size - 1] < 0) return [];
let i = 0;
while (i < size - 2 && nums[i] <= 0) {
let first = i + 1;
let last = size - 1;
while (first < last) {
if (nums[i] * nums[last] > 0) break;
const sum = nums[i] + nums[first] + nums[last];
if (sum === 0) {
resNums.push([nums[i], nums[first], nums[last]]);
}
if (sum <= 0) {
while (nums[first] === nums[++first]) {}
} else {
while (nums[last] === nums[--last]) {}
}
}
while (nums[i] === nums[++i]) {}
}
return resNums;
}
console.log(threeSum([-1, 0, 1, 2, -1, -4]));