/** * @param {number[]} nums * @return {number[][]} */ var threeSum = function(nums) { let res = [] let nums_ = nums.sort((a, b) => a - b) for (let i=0;i<nums_.length;i++){ if(i>0 && nums_[i]===nums_[i-1]) continue let left = i+1 let right = nums_.length-1 const target = 0 - nums_[i] while (left < right){ if(nums_[left]+nums_[right]==target){ res.push([nums_[i],nums_[left],nums_[right]]) while(nums_[left]===nums_[left+1]&&left<right){ left ++ } while(nums_[right]===nums_[right-1]&&left<right){ right -- } left ++ right -- }else if(nums_[left]+nums_[right] > target){ while(nums_[right]===nums_[right-1]&&left<right){right --} right-- }else if(nums_[left]+nums_[right] < target){ while(nums_[left]===nums_[left+1]&&left<right){left ++} left ++ } } } return res };