1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
int cmp(int a,int b) {
return a < b;
}
class Solution {
public:
int bSearch(int tmp,int left,vector<int>&num,int right) {
if(right - left <= 1) {
if(abs(tmp - num[left]) < abs(tmp - num[right])) {
return num[left];
}
else {
return num[right];
}
}
int mid = (left + right) / 2;
if(num[mid] == tmp)return tmp;
else
if(num[mid] > tmp) {
return bSearch(tmp,left,num,mid-1);
}
else {
return bSearch(tmp,mid+1,num,right);
}
}
int threeSumClosest(vector<int> &num, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int sum = 0;
int dis = 0xffff;
sort(num.begin(),num.end(),cmp);
for(int i = 0;i < num.size()-2;i++) {
for(int j = i+1;j < num.size()-1;j++) {
int tmp = num[i] + num[j];
tmp += bSearch(target-tmp,j+1,num,num.size()-1);
if(abs(tmp-target) < dis) {
sum = tmp;
dis = abs(tmp-target);
}
}
}
return sum;
}
};
|