三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

const threeSum = (nums = [-1, 0, 1, 2, -1, -4]) => {
    const res = []
    const len = nums.length
    nums.sort((x, y) => x - y)
    if (len < 3 || nums[0] > 0) return res
    for (let i = 0; i < len; i++) {
        if (i > 0 && nums[i] === nums[i - 1]) continue
        let l = i + 1,
            r = len - 1
        while (l < r) {
            let sum = nums[i] + nums[l] + nums[r]
            if (sum > 0) {
                r--
            } else if (sum < 0) {
                l++
            } else {
                res.push([nums[i], nums[l], nums[r]])
                while (l < r && nums[l] === nums[l + 1]) l++
                while (l < r && nums[r] === nums[r - 1]) r--
                l++
                r--
            }
        }
    }
    return res
}

  

posted @ 2023-02-06 12:20  671_MrSix  阅读(12)  评论(0编辑  收藏  举报