您的位置:首页 > 其它

【leetcode】3Sum Closest

2013-10-08 02:13 309 查看
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int ans;
bool first=true;//第一个3元组

sort(num.begin(),num.end());//sort,O(n*logn)

for(int i=0;i<=num.size()-3;i++)//O(n)
{//允许3元组中有重复的数字,这点和3Sum不一样
int sta=i+1,end=num.size()-1;
while(sta<end)//O(n)
{
int sum=num[i]+num[sta]+num[end];

if(first)//更新ans
{
ans=sum;
first=false;
}
else
{
ans=(abs(target-ans)<abs(target-sum))?ans:sum;
}

if(ans==target)//处理返回情况时,是ans与target比较
return ans;
else if(sum<target)//注意此处缩小范围时,是sum与target比较
sta++;
else end--;
}

}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: