当前位置:网站首页>leetcode16最接近的三数之和 (排序+ 双指针)
leetcode16最接近的三数之和 (排序+ 双指针)
2022-08-03 12:29:00 【_刘小雨】
作者简介:C/C++ 、Golang 领域耕耘者,创作者
个人主页:作者主页
活动地址:CSDN21天学习挑战赛
如果感觉博主的文章还不错的话,还请关注 、点赞 、收藏🧡三连支持一下博主哦~~~
题目描述
给你一个长度为 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
🧡 算法分析
此题用到了排序+ 双指针的思想
具体算法步骤为:
- 直接排序整个数组,然后从头开始遍历每个数,此时第一个数已经确定
- 用双指针l,r分别从左边
l = i + 1
和右边n - 1
往中间靠拢,找到sum = nums[i] + nums[l] + nums[r]
所有情况中最接近target
的sum
,更新re
- 在双指针移动的过程中,三数之和假设为sum
- 若sum > target,则r往左走,使sum变小,更接近target
- 若sum < target,则l往右走,使sum变大,更接近target
- 若sum == target,则表示找到了与num[i]搭配的组合num[l]和num[r],直接返回
代码实现
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
pair<int, int> re(INT_MAX, INT_MAX);
for(int i = 0; i< nums.size(); i++)
{
for(int j = i + 1, k = nums.size() - 1; j < k; j++)
{
while(k - 1 > j && nums[i] + nums[j] + nums[k - 1] >= target) k --;
int s = nums[i] + nums[j] + nums[k];
re = min(re, make_pair(abs(s - target), s)); // re中存取的是 差值 ,三数之和
if( k - 1 > j)
{
s = nums[i] + nums[j] + nums[k - 1]; // 找到前面一个
re = min(re, make_pair(abs(target - s), s));
}
}
}
return re.second;
}
};
执行结果:
时间复杂度分析
其中遍历了两种循环, 时间复杂度为O(n2)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
🧡 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
- Image fusion SDDGAN article learning
- 622. 设计循环队列
- 数据库系统原理与应用教程(074)—— MySQL 练习题:操作题 141-150(十八):综合练习
- 博客记录生活
- R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图
- 免费的网络传真平台_发传真不显示发送号码
- Sogou news-数据集
- R language ggplot2 visualization: use the patchwork bag plot_layout function will be more visual image together, ncol parameter specifies the number of rows, specify byrow parameters configuration dia
- nacos app
- 随机森林项目实战---气温预测
猜你喜欢
GameFi 行业下滑但未出局| June Report
How does Filebeat maintain file state?
漫画:怎么证明sleep不释放锁,而wait释放锁?
Random forest project combat - temperature prediction
Knowledge Graph Question Answering System Based on League of Legends
word标尺有哪些作用
苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
Jmeter使用
【蓝桥杯选拔赛真题48】Scratch跳舞机游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
Key points for account opening of futures companies
随机推荐
Use %Status value
-找树根2-
Byte's favorite puzzle questions, how many do you know?
数据库系统原理与应用教程(074)—— MySQL 练习题:操作题 141-150(十八):综合练习
LyScript implements memory stack scanning
漫画:怎么证明sleep不释放锁,而wait释放锁?
欧曼自动挡、银河大马力、行星新产品 欧曼全新产品以燎原之势赢领市场
AMS simulation
数据库系统原理与应用教程(075)—— MySQL 练习题:操作题 151-159(十九):综合练习
pandas连接oracle数据库并拉取表中数据到dataframe中、生成当前时间的时间戳数据、格式化为指定的格式(“%Y-%m-%d-%H-%M-%S“)并添加到csv文件名称中
R语言绘制时间序列的自相关函数图:使用acf函数可视化时间序列数据的自相关系数图
可重入锁详解(什么是可重入)
pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一天之前的所有数据(筛选一天范围数据)
数据库系统原理与应用教程(076)—— MySQL 练习题:操作题 160-167(二十):综合练习
一次内存泄露排查小结
Unsupervised learning KMeans notes and examples
Five super handy phone open-source automation tools, which is suitable for you?
Redis连接池工具类
word标尺有哪些作用
3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?