给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
方法一:跟每日一题14很相似,先排序,再双指针。
class Solution {
public:
void isans(int sum, int* ans,int target){
if(abs(sum-target)<abs(*ans - target)){
*ans = sum;
}
}
int threeSumClosest(vector<int>& nums, int target) {
int n = nums.size();
if(n == 3){
return nums[0]+nums[1]+nums[2];
}
sort(nums.begin(),nums.end());
int ans = 1e7;
for(int first = 0;first<n;first++){
if(first>0 && nums[first] == nums[first-1]){
continue;
}
int third = n-1;
int second = first+1;
while(second < third){
int sum = nums[first]+nums[second]+nums[third];
if(nums[first]+nums[second]+nums[third] == target){
return target;
}
isans(sum,&ans,target);
if(sum > target){
third--;
}else{
second++;
}
}
}
return ans;
}
};

该博客讨论了一种经典的算法问题,即在整数数组中找到三个数,使得它们的和最接近给定的目标值。方法是先对数组进行排序,然后使用双指针技术遍历数组,通过比较当前三数之和与目标值的差距来更新最接近的和。这种方法有效地解决了问题,适用于大规模数据集。
660

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



