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

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
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值