【每日一题】LeetCode - 最接近的三数之和
LeetCode 的「最接近的三数之和」问题要求我们从给定整数数组中找到三个数的和,使它最接近目标值。适合初学者的原因在于它结合了双指针、排序等基本技巧,为大家理解基本的算法和数据结构提供了一个很好的机会。
如果你不知道什么是双指针可以参考我之前发的博客,或者直接看我数据结构的博客专栏【数据结构】双指针算法:理论与实战
一、题目介绍
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
这道题与上一题很类似,如果你没看过上一题强烈建议务必去看一下【每日一题】LeetCode - 三数之和
示例 1
- 输入:
nums = [-1,2,1,-4], target = 1 - 输出:
2 - 解释:与
target最接近的和是2,即-1 + 2 + 1 = 2。
示例 2
- 输入:
nums = [0,0,0], target = 1 - 输出:
0 - 解释:与
target最接近的和是0,即0 + 0 + 0 = 0。
二、解题思路
- 排序:首先将数组排序,这有助于后续通过双指针更有效地缩小范围。
- 遍历 + 双指针:遍历每个元素作为三元组的第一个元素,然后利用双指针来找到另外两个数。
- 求最接近的和:通过计算当前和与目标的差距,不断更新最接近的和。
三、代码实现
以下是代码实现,带有详细注释:
classSolution{ public:intthreeSumClosest(vector<int>& nums,int target){ int ans =0x7fffffff, sum =0;sort(nums.begin