最接近的三数之和

链接

16. 最接近的三数之和 - 力扣(LeetCode)

思路

  1. 利用两数之和的思想,题目提到答案只有唯一的一个,那么我们可以知道------遇到相等的直接返回,然后就是需要明确一点------会出现一样的元素,我们要保证这个元素唯一性

  2. 确定要第一个数字,剩下俩个数字进行两数之和,也需要明确跳出重复元素,并且不断缩小范围。

代码

javascript 复制代码
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function (nums, target) {
    nums.sort((a, b) => a - b);
    let res = Number.MAX_SAFE_INTEGER, n = nums.length;

    // 排序后使用set去重
    for (let i = 0; i < nums.length; i++) {
        if (i > 0 && nums[i] === nums[i - 1]) {
            continue;
        }
        let j = i + 1, k = n - 1

        while (j < k) {
            let sum = nums[i] + nums[j] + nums[k]
            if (sum === target) return target

            if (Math.abs(sum - target) < Math.abs(res - target)) {
                res = sum
            }

            if (sum > target) {
                let k0 = k - 1
                while (j < k0 && nums[k0] == nums[k]) --k0
                k = k0
            }
            else {
                let j0 = j + 1
                while (j0 < k && nums[j0] == nums[j]) ++j0
                j = j0
            }
        }
    }

    return res;
};
相关推荐
行者全栈架构师3 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_03 小时前
mac(m5)平台编译openjdk
java
JieE21212 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2020 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法