题目描述:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
https://leetcode-cn.com/problems/3sum-closest/
解题思路
输入:vector<int> nums, target
思路:
1. sort(nums)
2. 对排序后的nums从小向大进行遍历i
3. 遍历到i时,使用双指针查找i之后的两数之和最接近target - nums[i]的两个值,不断更新resut
// Author: BJTU 张佳星
// Email: jiaxing0901@163.com
#include <iostream>
#include<vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int result = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.size() - 2; i++)
{
int first = i + 1, second = nums.size() - 1;
while (first < second)
{
int sum = nums[i] + nums[first] + nums[second];
if (abs(sum - target) < abs(result - target))
result = sum;
if (sum == target)
return target;
if (sum < target)
first++;
else
second--;
}
}
return result;
}
};
int main()
{
std::cout << "Hello World!\n";
}