题目描述:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法实现:JavaScript
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
var sum = []
nums.sort((a, b) => a - b)
if (nums === null || nums.length < 3) {
return sum
}
for (var i = 0; i < nums.length; i++ ) {
if (nums[i] > 0) {
break
}
if (i > 0 && nums[i] === nums[i - 1]) {
continue
}
var j = i + 1
var k = nums.length - 1
while (j < k) {
var add = nums[i] + nums[j] + nums[k]
if (add === 0 ) {
sum.push([nums[i], nums[j], nums[k]])
while (nums[j] === nums[j + 1]) {
j++
}
while (nums[k] === nums[k - 1]) {
k--
}
j++
k--
} else if (add > 0) {
k--
} else {
j++
}
}
}
return sum
};
思路:
总结:
尝试了很久的暴力法解题都没有成功,最后通过借鉴大佬的代码勉强通过了,但是中间很多细节都不是自己独立想出来的,需要对哈希算法进一步理解并且深入思考这道题。