// @lc code=start
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function (nums) {
const lists = [];
nums.sort((a, b) => a - b);
let i = 0;
let y = 0;
for (i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] === nums[i - 1]) continue;
y = i + 1;
for (let j = nums.length - 1; j > y;) {
if (j < nums.length - 1 && nums[j] === nums[j + 1]) {
j--;
continue;
}
if (nums[i] + nums[j] + nums[y] === 0) {
lists.push([nums[i], nums[j], nums[y]]);
j--;
y++;
}
if (nums[i] + nums[j] + nums[y] > 0) j--;
if (nums[i] + nums[j] + nums[y] < 0) y++;
}
}
return lists;
};