力扣 16.最接近的三数之和

文章目录

题目介绍

解法

设 s=nums[i]+nums[j]+nums[k],为了判断 s 是不是与 target 最近的数,我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论:

  1. 如果 s=target,那么答案就是 s,直接返回 s。

  2. 如果 s>target,那么如果 s−target<minDiff,说明找到了一个与 target 更近的数,更新 minDiff 为 s−target,更新答案为 s。然后和三数之和一样,把 k 减一。

  3. 否则 s<target,那么如果 target−s<minDiff,说明找到了一个与 target 更近的数,更新 minDiff 为 target−s,更新答案为 s。然后和三数之和一样,把 j 加一。

代码如下:

java 复制代码
class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int minDiff  = Integer.MAX_VALUE;//三数之和与target之差最小值(正数)
        int ans = 0; //最后返回的三数之和
        int n = nums.length;
        for (int i = 0; i < n - 2; i++) {
            int x = nums[i];
            if (i > 0 && x == nums[i - 1]) continue; // 跳过重复数字
            int l = i + 1;
            int r = n - 1;
            while (l < r) {
                int sum = x + nums[l] + nums[r]; //三个数之和
                if (sum > target) {
                    if (sum - target < minDiff ) { // s 与 target 更近
                        minDiff  = sum - target;
                        ans = sum;
                    }
                    r--;
                } else if (sum < target) {
                    if (target - sum < minDiff ) { // s 与 target 更近
                        minDiff  = target - sum;
                        ans = sum;
                    }
                    l++;
                } else {
                    return sum;
                } 
            }
    
        }
        return ans;
    }
}
相关推荐
瓦特what?2 分钟前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
楽码38 分钟前
自动修复GoVet:语言实现对比
后端·算法·编程语言
是乐谷41 分钟前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
重生之我是Java开发战士1 小时前
【数据结构】深入理解单链表与通讯录项目实现
数据结构·链表
杰克尼1 小时前
415. 字符串相加
算法
Java水解1 小时前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
tanxiaomi1 小时前
数据库索引视角:对比二叉树到红黑树再到B树
数据结构·数据库·b树
lifallen1 小时前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet1 小时前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea
欧哈东哥2 小时前
【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
java·数据结构·c++