16. 最接近的三数之和(javascript)16. 3Sum Closest

该博客详细介绍了如何解决LeetCode上的15.3Sum问题,即给定一个整数数组和一个目标值,找到数组中和为目标值的三个数,使得它们的和与目标值最接近。博主提供了使用JavaScript实现的解决方案,通过排序数组,设置双指针从两端向中间靠拢,不断调整指针位置来找到最接近的三数之和。此外,还强调了在处理过程中无需考虑重复值的情况。
摘要由CSDN通过智能技术生成

15. 三数之和(javascript)15. 3Sum

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

返回这三个数的和。

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

Given an integer array nums of length n and an integer target, find three integers in nums such that the sum is closest to target.

Return the sum of the three integers.

You may assume that each input would have exactly one solution.

示例 1:

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

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

这个题目可以不用将重复值特殊对待,因为求的是三个数之和最接近目标值

  1. 将获取的数组进行升序排列
  2. 获取最初的三数之和 nums[0] + nums[1] + nums[2]
  3. 将列表进行遍历,将两个指针分别指向i+1和len-1,两个指针往中间靠拢
  4. 当遇到|sum - target|<|res - target|,将res值进行更新
  5. l++ r–是什么情况下的呢,
    当三数之和<目标值,l指针往右走l++
    当三数之和>目标值,r指针往右走r–
    当三数之和==目标值,直接返回res。(题目中恰好一个解。)
  6. 当循环结束时将res的值返回
var threeSumClosest = function (nums, target) {
    nums.sort((a, b) => { return a - b })
    let len = nums.length
    let res = nums[0] + nums[1] + nums[2]
    for (let i = 0; i < len; i++) {
        let l = i + 1
        let r = len - 1
        while (l < r) {
            let sum = nums[i] + nums[l] + nums[r]
            if (Math.abs(sum - target) < Math.abs(res - target)) {
                res = sum
            }
            if (sum < target) {
                l++
            } else if (sum > target) {
                r--
            } else {
                return res
            }
        }
    }
    return res
};

leetcode:https://leetcode.cn/problems/3sum-closest/

可参考官方解题思路:
https://leetcode.cn/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值