Open 1684838553 opened 1 year ago
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
nums.sort((a,b)=>a-b)
let res = []
if(nums.length < 3) return res
for(let i = 0;i<nums.length;i++){
// nums[i] > 0 时,nums[l]和nums[r] 也大于0
if(nums[i] > 0) return res
let l = i+1
let r = nums.length -1
if(i !== 0 && nums[i] === nums[i-1]){
continue;
}
while(l < r){
let sum = nums[i] + nums[l] + nums[r]
if(sum === 0){
res.push([nums[i], nums[l] , nums[r]])
l++
r--
// 去重操作
while(nums[l] === nums[l-1]){
l++
}
while(nums[r] === nums[r+1]){
r--
}
}
if(sum<0){
l++
}
if(sum>0){
r--
}
}
}
return res
};
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
let set = new Set()
nums.sort((a,b)=>a-b)
if(nums.length<3) return []
for(let i =0;i<nums.length;i++){
if(nums[i] > 0) {
break
}
let l = i+1
let r = nums.length -1
while(l < r){
const sum = nums[i] + nums[l]+ nums[r]
if(sum === 0){
set.add(`${nums[i]} ${nums[l]} ${nums[r]}`)
r--
l++
}
if(sum>0) {
r--
}
if(sum<0){
l++
}
}
}
set = [...set].map(item=>item.split(' ').map(item=>+item))
return set
};
15. 三数之和 给你一个包含 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]] 示例 2:
输入:nums = [] 输出:[] 示例 3:
输入:nums = [0] 输出:[]