Skip to content

Code:

js
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function (nums) {
    const rusult = []
    const numbers = nums.sort((a, b) => a - b)

    for (let i = 0; i < numbers.length - 2 && numbers[i] <= 0; i++) {
        if (i > 0 && (numbers[i - 1] === numbers[i])) {
            continue
        }

        let j = i + 1
        let k = numbers.length - 1

        while (j < k) {
            const t = numbers[i] + numbers[j] + numbers[k]

            if ((t === 0)) {
                rusult.push([numbers[i], numbers[j], numbers[k]])

                while (j < k && numbers[k] === numbers[--k]) {}
                while (j < k && numbers[j] === numbers[++j]) {}
            } else if (t > 0) {
                while (j < k && numbers[k] === numbers[--k]) {}
            } else {
                while (j < k && numbers[j] === numbers[++j]) {}
            }
        }
    }

    return rusult
};


console.log(threeSum([-1, 0, 1, 2, -1, -4]))
console.log(threeSum([0, 0, 0]))

❤ With Algorithm