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

文章目录

题目介绍

解法

设 s=numsi+numsj+numsk,为了判断 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;
    }
}
相关推荐
wespaul2 分钟前
VeapAI 自然语言操作实战|第 04 篇:系统数据加工——把系统自身的元数据吃成知识
java·大数据·运维·数据库·人工智能
幼儿园蛋小黑4 分钟前
SPI 子系统:从原理到实践
java·前端·数据库
浅念-5 分钟前
动态规划:线性DP——多状态DP与子数组专题笔记
c++·笔记·算法·leetcode·职场和发展·动态规划·力扣
Data analyse45618 分钟前
rrweb回放事件资源加载顺序重放校验
前端·人工智能·算法·机器学习·数据分析
昨夜见军贴061621 分钟前
原始采样记录数字化落地,IACheck AI 报告文档审核 Agent 实现监测文档校验自动化
人工智能·算法·自动化
yangmu320330 分钟前
Unity 开发过程与底层原理
java·开发语言
lexiangqicheng33 分钟前
自定义表单跨端共用机制-PC设计APP渲染
java·前端·javascript
微学AI36 分钟前
从历史曲线到提前预警:TimechoAI 的时序预测与业务落地实践
人工智能·算法
zhikouai36 分钟前
AI辅助逆向工程链路:从二进制接入到等价性校验
java·linux·前端
随性而行3601 小时前
企业微信API接口开发实战:如何实现消息回调接收与业务事件处理?
java·前端·python·微信·机器人·企业微信