LeetCode 16 最接近的三数之和 - 双指针逼近

LeetCode 16 最接近的三数之和,和三数之和框架一样,只是从"等于 target"变成"最接近 target"。


🟡 最接近的三数之和

找三个数使和最接近 target。[-1,2,1,-4], target=1 → 2(-1+2+1=2)


和第 15 题三数之和几乎一样:排序→固定一个数→双指针。区别是找到一个和之后不返回------因为可能还有更接近的。每次算和三数之和跟 target 的差值,记录最小差值对应的和。

java 复制代码
public int threeSumClosest(int[] nums, int target) {
    Arrays.sort(nums);
    int res = nums[0] + nums[1] + nums[2];  // 初始值

    for (int i = 0; i < nums.length - 2; i++) {
        int left = i + 1, right = nums.length - 1;
        while (left < right) {
            int sum = nums[i] + nums[left] + nums[right];
            if (Math.abs(sum - target) < Math.abs(res - target)) res = sum;
            if (sum < target) left++;
            else if (sum > target) right--;
            else return sum;  // 差 0,不可能更接近了
        }
    }
    return res;
}

和第 15 题比少了去重------不是找所有解,是找最近的一个,重复值不影响。也不用跳过 i 的重复。唯一的新东西是维护"最接近"的逻辑,绝对值差值更小就更新。


更多干货,欢迎访问我的算法笔记网站 codelu.cc,有兴趣的话可以去看看~

这道题你踩过什么坑?或者你用别的语言实现过吗?评论区聊聊,回头复习也方便翻。

相关推荐
胡家伟++3 小时前
我用 48 轮 AI 思维链做了一次研究战略推演:从“验证信号危机“到“验证栈“统一框架
人工智能·算法
朝朝辞暮i3 小时前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
垆边人似月.4 小时前
华为题:污染水域
算法
我命由我123454 小时前
Photoshop - Photoshop 使用仿制图章工具移除对象
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法
All for pursuit.4 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode
ZhangJun954 小时前
Mobike 共享单车分析项目
人工智能·python·算法·kmeans·聚类·knn
Navigator_Z4 小时前
LeetCode //C - 1281. Subtract the Product and Sum of Digits of an Integer
c语言·算法·leetcode
薛定e的猫咪4 小时前
(AISTATS 2023)BaCaDI 逐章阅读
人工智能·深度学习·算法·机器学习
Benny_Tang5 小时前
AT_arc180_d [ARC180D] Division into 3 题解
数据结构·c++·算法
殷色玫瑰5 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio