当前位置:网站首页>LeetCode 16. 最接近的三数之和(中等、数组)day13
LeetCode 16. 最接近的三数之和(中等、数组)day13
2022-04-22 22:56:00 【White Code】
题目描述:给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。假定每组输入只存在恰好一个解。
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
提示:
3 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
-104 <= target <= 104
题目解析:双指针方法
本题与题目15. 三数之和非常相像,可以参考文章:https://blog.csdn.net/qq_43751200/article/details/124293990
1、首先对数据进行排序,使用Arrays.sort(nums),时间复杂度为O(nlogn);
2、在数组nums中,进行遍历,每遍历一个值利用其下标i,形成一个固定值nums[i];
3、再使用指针left指向i的下一个位置,即left = i +1, 指针right指向数组的尾部,即right = nums.length -1;
4、根据currentSum = nums[i] + nums[left] + nums[right]的结果,判断与目标target的距离,如果更近,更新closestSum;
5、同时判断currentSum与target的大小关系,
如果currenSum > target, right -= 1并跳过所有重复的nums[right],
如果currentSum < target, left+= 1并跳过所有重复的nums[left],
如果currentSum == target,这直接返回currentSum即可;
代码实现:
public int threeSumClosest(int[] nums, int target) {
// 1. 对数组进行排序
Arrays.sort(nums);
// 假设当前最接近target的数为前三项和
int closestSum = nums[0] +nums[1] + nums[2];
// 2. 遍历数组
for(int i = 0; i < nums.length - 2; i++){
// 2.1 定义双指针的位置信息
int left = i + 1, right = nums.length -1;
while (left < right){
int currentSum = nums[i] +nums[left] +nums[right]; // 当前位置的三个数的和
// 2.2 比较当前三个数的和到target距 与 closestSum到target的距离大小
if(Math.abs(currentSum - target) < Math.abs(closestSum - target)){
closestSum = currentSum;
}
if(currentSum == target){ // 如果currentSum == target,直接返回currentSum即可
return currentSum;
}else if(currentSum > target){ // 如果currenSum > target, right -= 1并跳过所有重复的nums[right]
while (left < right && nums[right] == nums[--right]);
}else { // 如果currentSum < target, left+= 1并跳过所有重复的nums[left]
while (left < right && nums[left] == nums[++left]);
}
}
}
return closestSum;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
版权声明
本文为[White Code]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_43751200/article/details/124340255
边栏推荐
猜你喜欢

Minio基本使用與原理

News Express I mobtech passed the "special safety evaluation" of China Academy of information and communications

Flutter 一文搞定图片选择和图片上传

Même 30 ans de dur labeur de fenêtre froide peuvent être loin de la richesse...

交换机的接口有哪些?一文带你记住其名称及作用

API gateway implementation function

英语 | Day13、14 x 句句真研每日一句(平行、嵌套结构)

Minio基本使用与原理

CVPR 2022: is smile recognition also sexist? Zhejiang University and Wuhan University jointly set up a fairness improvement framework

RPC details
随机推荐
L1-066 猫是液体 (5 分)
js力扣每日一题(2022/4/22)---396.旋转函数
Cron expression
Go语言学习笔记——读锁重入导致死锁
常用搜索引擎及语法
SQL语言详解
Introduction to padding in packet encryption (pkcs1padding / pkcs5padding / iso10126padding)
Robot OS系统架构设计
等价多米诺骨牌对的数量-c语言实现
how to become professional
Difference between ov code signature and ev code signature certificate
90%的测试工程师是这样使用Postman做接口测试的……
How to open MT5 account and what products can MT5 trade?
九九乘法表代码
3. 源码
mt5账户怎么开通,mt5能交易哪些产品?
GDB调试程序的核心技术-ptrace系统调用与使用示例
vtkVertex 顶点
减治思想——二分查找详细总结
L1-065 嫑废话上代码 (5 分)