题目🌵
📝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
}