# Leetcode#16 3Sum Closest

120人阅读 评论(0)

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;
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：32514次
• 积分：3296
• 等级：
• 排名：第10650名
• 原创：311篇
• 转载：4篇
• 译文：0篇
• 评论：1条
文章分类
评论排行
最新评论