当前位置:网站首页>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)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
🧡 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
猜你喜欢

层次分析法

YOLOv5 training data prompts No labels found, with_suffix is used, WARNING: Ignoring corrupted image and/or label appears during yolov5 training

云计算服务主要安全风险及应对措施初探

特征降维学习笔记(pca和lda)(1)

从零开始C语言精讲篇5:指针

期货开户中常见问题汇总

Knowledge Graph Question Answering System Based on League of Legends

【蓝桥杯选拔赛真题48】Scratch跳舞机游戏 少儿编程scratch蓝桥杯选拔赛真题讲解

Win11怎么禁止软件后台运行?Win11系统禁止应用在后台运行的方法

漫画:怎么证明sleep不释放锁,而wait释放锁?
随机推荐
Yahoo! Answers-数据集
bash while loop and until loop
数据库基础知识一(MySQL)[通俗易懂]
An动画基础之元件的图形动画与按钮动画
In order to counteract the drop in sales and explore the low-end market, Weilai's new brand products are priced as low as 100,000?
Byte's favorite puzzle questions, how many do you know?
苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
Key points for account opening of futures companies
An动画优化之补间形状与传统补间的优化
Five super handy phone open-source automation tools, which is suitable for you?
特征工程学习笔记
第3章 搭建短视频App基础架构
LyScript implements memory stack scanning
An动画基础之按钮动画与基础代码相结合
4500 words sum up, a software test engineer need to master the skill books
Last blog for July
7月份最后一篇博客
How to build an overseas purchasing system/purchasing website - source code analysis
无监督学习KMeans学习笔记和实例
Kubernetes 网络入门