【我的leetcode日记】16. 最接近的三数之和——js

99 阅读1分钟

仅记录自己刷题过程,顺便督促自我学习~

来源链接:leetcode.cn/problems/3s…

中等

题目描述

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入: nums = [-1,2,1,-4], target = 1
输出: 2
解释: 与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入: nums = [0,0,0], target = 1
输出: 0

提示:

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • 104-10^4 <= target <= 10410^4

数组实现

/**
* @param {number[]} nums 
* @param {number} target 
* @return {number} 
*/ 
var threeSumClosest = function(nums, target) { 
    let arr=nums.sort((a,b)=>a-b); 
    let len=nums.length; 
    //定义一个最接近目标值的变量,当循环结束后,还没有找到和目标值相等的和的话就返回最接近的min 
    let min=Infinity;
    for(let i=0;i<len;i++){
        let [l,r]=[i+1,len-1]; 
        while(l<r){
            let sum=nums[i]+nums[l]+nums[r]; 
            if(sum<target){ 
                // 和比目标值小,所以右移指针
                l++; 
            }
            else if(sum>target){
                // 和比目标值大,左移指针 
                r--; 
             }else{ 
                 //相等,直接返回sum 
                 return sum; 
             } 
             //等式成立说明sum距离目标值更近,更近的值存到min 
             if(Math.abs(sum-target)<Math.abs(min-target)){
                 min=sum; 
                 } 
             }
        } 
     return min;