📝Leetcode 15 三数之和

120 阅读1分钟

题目🌵

📝Leetcode 15 三数之和

✏️leetcode-cn.com/problems/3s…


给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

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

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

解题思路💡

哈希表

  • 两层for循环可以确立a,b的值,最后再比较c的值是否存在于哈希表中

  • 但是,这里有个问题,三元组合可能会存在重复元素

  • 不好做减枝操作

  • 难点:如何去除重复解。

    跳过这种方法

双指针

var threeSum = function (nums) {
    const len = nums.length
    if (len < 3) return []
    nums.sort((a, b) => a - b)
    const res = []
    for (let i = 0; i < len - 2; i++) {
        if (nums[i] > 0) break
        // a 去重
        if (i > 0 && nums[i] === nums[i - 1]) continue
        let l = i + 1,
            r = len - 1
        while (l < r) {
            const sum = nums[l] + nums[r] + nums[i]
            if (sum < 0) {
                l++
                continue
            }
            if (sum > 0) {
                r--
                continue
            }
            res.push([nums[i], nums[l], nums[r]])
            //b c 去重
            while (l < r && nums[l] === nums[l + 1]) l++
            while (l < r && nums[r] === nums[r - 1]) r--
            //
            r--
            l++
        }
    }
    return res
}

image-20220210183207415