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;
}
};
【leetcode】3Sum Closest
最新推荐文章于 2021-11-10 10:47:02 发布