枚举+二分搜索
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n=nums.size();
int i,j,k;
int ans=nums[0]+nums[1]+nums[2];
sort(nums.begin(),nums.end());
for(i=0;i<=n-3;i++)
{
if(i>0&&nums[i]==nums[i-1])
continue;
for(j=i+1,k=n-1;j<k;)
{
if(j>i+1&&nums[j]==nums[j-1])
{
j++;
continue;
}
if(k<n-1&&nums[k]==nums[k+1])
{
k--;
continue;
}
int d=nums[i]+nums[j]+nums[k];
if(d==target)
return d;
else if(d>target)
k--;
else
j++;
if(abs(d-target)<abs(ans-target))
ans=d;
}
}
return ans;
}
};
本文介绍了一种使用枚举加二分搜索的方法来解决三数之和最接近目标值的问题。通过先排序再利用双指针技巧,有效地减少了搜索空间,提高了算法效率。
748

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



