首页 > 试题广场 >

最接近的三数之和

[编程题]最接近的三数之和
  • 热度指数:1485 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个数组 nums 和一个目标值 target ,请问从 nums 中选出三个数,使其之和尽量接近目标数,即三数之和与目标数只差绝对值尽可能小。

返回满足题面要求的三数之和。

数据范围:数组长度满足 ,数组中的值满足 ,目标值满足 ,可以保证只有一个结果。
示例1

输入

[-1,2,1,-4],1

输出

2

说明

最接近 1 的三数之和是 -1+2+1 = 2  
示例2

输入

[0,0,0],1

输出

0

说明

 只有一种选择 0+0+0  
示例3

输入

[0,1,0,0],0

输出

0
export function ClosestSum(nums: number[], target: number): number {
    // write code here
    nums.sort((a,b)=>a-b)
    let result:number=nums[0]+nums[1]+nums[2]
    let oldDiff=Math.abs(target-result)
    for(let i=0;i<nums.length-2;i++){
        let left=i+1,right=nums.length-1
        while(left<right){
            let sum=nums[i]+nums[left]+nums[right]
            let newDiff=Math.abs(sum-target)
            if(newDiff<oldDiff){
                result=sum
                oldDiff=newDiff
            }
            if(sum>target)right--
            else left++
        }
    }
    return result
}
发表于 2023-06-22 20:41:36 回复(0)

问题信息

难度:
1条回答 3590浏览

热门推荐

通过挑战的用户

查看代码