题目:
思路:在刚看到这个题目的时候首先想到的还是通过多次for循环去解决,但是有个很大的缺陷就是时间复杂度过高,以及循行速度超出规定,这个时候想到了用三重指针去解决
源码:
let threeSum = function (nums) {
if (nums.length < 3) return []
let temp = []
let res = []
nums.sort((a, b) => a - b)
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1
let right = nums.length - 1
if (i > 0 && nums[i] === nums[i - 1]) {
continue
}
while (left < right) {
if (nums[i] + nums[left] + nums[right] === 0) {
if (nums[left] === nums[left + 1] && right > left + 1) {
left++
continue
} else if (nums[right] === nums[right - 1] && right > left + 1) {
right--
continue
}
temp.push(nums[i])
temp.push(nums[left])
temp.push(nums[right])
res.push(temp)
temp = []
left++
} else if (nums[i] + nums[left] + nums[right] < 0) {
left++
} else {
right--
}
}
}
return res
}
结果: