我的js算法爬坑之旅-最接近的三数之和

183 阅读1分钟

第六十二天:力扣16题,最接近的三数之和

地址:leetcode-cn.com/problems/3s…

思路:排序+双指针,排序,固定一个值,左右指针向中间逼近

三数和 > target,右指针左移

三数和 < target, 左指针右移 

三数和 = target, 直接输出target

var threeSumClosest = function(nums, target) {
  nums.sort((a, b) => a - b);
  let sum = nums[1] + nums[2] + nums[0];
  for(let i = 0; i < nums.length - 2; i++)
  {
    let left = i + 1;
    let right = nums.length - 1;
    while(left < right)
    {
      sum = (Math.abs(nums[i] + nums[left] + nums[right] - target) < Math.abs(sum - target) ? nums[i] + nums[left] + nums[right] : sum);
      if(nums[i] + nums[left] + nums[right] === target)
      {
        return target;
      }
      else if(nums[i] + nums[left] + nums[right] > target)
      {
        right--;
      }
      else{
        left++;
      }
    }
  }
  return sum;
};

执行用时:92 ms, 在所有 JavaScript 提交中击败了76.40%的用户

内存消耗:39.6 MB, 在所有 JavaScript 提交中击败了25.17%的用户