給定一個包含 n 個整數的數組 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合爲:
[
[-1, 0, 1],
[-1, -1, 2]
]
解法如下:
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function (nums) {
let len = nums.length
nums.sort((a, b) => a - b)
if (nums[0] > 0 || nums[len - 1] < 0) return []
let resArr = []
for (let i = 0; i < len; i++) {
if(nums[i] == nums[i - 1]) continue
let start = i + 1
let end = len - 1
let res = []
while (start < end) {
if (nums[start] + nums[end] + nums[i] > 0) {
end--
} else if (nums[start] + nums[end] + nums[i] < 0) {
start++
} else {
res = [nums[i], nums[start++], nums[end--]]
resArr.push(res)
while (start < end && nums[start] == nums[start - 1]) {
start++
}
while (start < end && nums[end] == nums[end + 1]) {
end--
}
}
}
}
return resArr
};
如有更好解法,歡迎留言探討。