我还是用挺暴力方法找的,竟然过了。
class Solution {
public:
int final_sum;
void findTwoNums(vector<int> &num,int left,int first_num,int target)
{
if(final_sum==target) return;
if(left==num.size()-1) return;
int r=num.size()-1;
for(int rr=r;rr>left;rr--)
{
int sum0=first_num+num[rr];
for(int l=left;l<rr;l++)
{
int sum1=sum0+num[l];
if(abs(sum1-target)<abs(final_sum-target))
{
final_sum=sum1;
}
}
}
}
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
final_sum=INT_MIN/2;
if(num.size()<=2) return 0;
sort(num.begin(),num.end());
for(int i=0;i<num.size()-2;i++)
{
findTwoNums(num,i+1,num[i],target);
}
return final_sum;
}
};