一、 问题描述
Leecode第十六题,题目为:
Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
问题理解为:
给定一个包含n个整数的数组和一个目标整数,在数字中找到三个整数,使它们的和最接近目标,返回三个整数的和。您可以假设每个输入都只有一个解。
例:
给定数组:nums = [- 1, 2, 1, -4], target = 1。
最接近目标的和是2。(-1 + 2 + 1 = 2)
二、算法思路
1、先将给定数组排序
2、计算三数之和,找到最接近给定值的
三、实现代码
class Solution
{
public:
int threeSumClosest(vector<int> &num, int target)
{
int res = num[0] + num[1] + num[2];
std::sort(num.begin(), num.end());
for (int i = 0; i <=num.size(); i++)
{
int num2 = i + 1;
int num3 = num.size() - 1;
while (num2 < num3)
{
int sum = num[i] + num[num2] + num[num3];
if (abs(sum - target) < abs(res - target))
res = sum;
if (sum < target)
num2++;
else if (sum > target)
num3--;
else
{
num2++;
num3--;
}
}
}
return res;
}
};
本文详细解析了LeetCode上的第16题——三数之和最接近目标的解决方案。介绍了如何通过排序和双指针技巧来高效地解决这一问题,同时提供了一个C++实现的代码示例。
266

被折叠的 条评论
为什么被折叠?



