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).
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
sort(num.begin(),num.end());
int i,u,d,a,r=num[0]+num[1]+num[2];
bool flag=true;
for(i=0;i<=num.size()-3&&flag;i++) {
u=i+1;
d=num.size()-1;
while(u < d) {
a=num[i]+num[u]+num[d];
if(abs(a-target)<abs(r-target)) {
r = a;
}
if(a > target)d--;
else if(a < target)u++;
else {
flag = false;
break;
}
}
}
return r;
}
};
解法:O(n^3) too naive。我的这种解法是O(n^2),关键处思路同 Two Sum。