熊浩宇
发布于 2024-05-31 / 0 阅读 / 0 评论 / 0 点赞

leetcode,JavaScript 16、最接近的三数之和

var threeSumClosest = function(nums, target) {
  let len = nums.length
  // 数组长度小于等于3  直接进行累加
  let num
  if(len<=3) return num = nums.reduce((a,b)=>a+b)
  // 先定义一个最小值
  let min = Math.abs(target-(nums[0]+nums[1]+nums[2]))
  // 进行排序
  nums.sort((a,b)=>a-b)
  for(let i = 0 ; i<len;i++){
    // 这个值与上一个值相等  跳出循环
    if(nums[i]===nums[i-1])continue
    // 定义左右指针
    let right = len-1
    let left = i+1
    while(right>left){
      let sum = nums[i]+nums[left]+nums[right]
      // 如果sum与目标值相等  直接返回num等于目标值
      if(sum===target)return num = target
      // 如果sum-target的绝对值小于min  说明这个值就是我们可以要的
      if(Math.abs(sum-target)<=min) {
        // 给min赋值  返回值等于sum
        min = Math.abs(sum-target)
        num = sum
      }
      // 目标值大于target  右指针往左  小于target  左指针往右
      if(sum>target)right--
      else if(sum<target)left++
    }
  }
  return num
};


评论