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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.