# Leetcode#16 3Sum Closest

Difficulty: Medium

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

int threeSumClosest(vector<int>& nums, int target) {
int ans = 9999999,ans1;
int len =  nums.size();
sort(nums.begin(),nums.end());
for(int i = 0;i<len-2;i++){
int beg = i+1, en = len-1;
int expect;
while(en>beg){
expect = target - nums[beg] - nums[en] - nums[i];

if(nums[beg]==nums[beg-1]&&beg>i+1)
{   beg++;
continue;}
if(nums[en]==nums[en+1]&&en<len-1){
en--;
continue;}

if(expect>0){
//cout<<nums[i]<<nums[beg]<<nums[en]<<endl;
// cout<<"expect is "<<expect<<endl;
if(expect<ans)
{
ans1  = target-expect;
ans = expect;
}
beg++;
//cout<<ans1<<endl;
}
else if(expect<0){
// cout<<nums[i]<<nums[beg]<<nums[en]<<endl;
//cout<<"expect is "<<expect<<endl;
if(0-expect<ans)
{
ans1  = target-expect;
ans = 0-expect;
}
en--;
// cout<<ans1<<endl;
}
else{
return target;
}
}

}

return ans1;
}

• 本文已收录于以下专栏：

举报原因： 您举报文章：Leetcode#16 3Sum Closest 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)