给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution {
public:
int margin(int sum, int target){
return sum>target?sum-target:target-sum;
}
int threeSumClosest(vector<int>& nums, int target) {
std::sort(nums.begin(), nums.end());
int sum = nums[0] + nums[nums.size()-1] + nums[nums.size()-2];
int ans = margin(sum, target);
for(int c = nums.size() - 1; c >= 2; c--){
for(int a = 0, b = c - 1; a < b; ){
int temp_sum = nums[a] + nums[b] + nums[c];
int temp_margin = margin(temp_sum, target);
if(temp_margin < ans){
sum = temp_sum;
ans = temp_margin;
}
if(temp_sum < target){
a++;
}
else if( temp_sum > target){
b--;
}
else{
return sum;
}
}
}
return sum;
}
};
博客围绕一个包含n个整数的数组和目标值展开,要找出数组中三个整数,使其和与目标值最接近,并返回这三个数的和,且假定每组输入只有唯一答案。
351

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



