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,有兴趣的话可以去看看~

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

相关推荐
一去不复返的通信er4 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
考研保研资料分享6 小时前
985工科跨保上财应用统计:数学笔试、匿名面试与机试复盘
面试·职场和发展
程序 代码狂人7 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade8 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
Xin7708 小时前
LeetCode 79. 单词搜索(DFS 回溯法)
leetcode
小郎君65810 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
邵奈一10 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS10010 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法
shehuiyuelaiyuehao10 小时前
算法56,重排链表
数据结构·算法·链表