力扣,三数之和,js解法

92 阅读1分钟

题目:

image.png

思路:在刚看到这个题目的时候首先想到的还是通过多次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
}

结果:

image.png