欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 力扣 16.最接近的三数之和

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

2024/10/25 8:15:47 来源:https://blog.csdn.net/qq_51352130/article/details/142306828  浏览:    关键词:力扣 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 加一。

代码如下:

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;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com