class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
sort(num.begin(), num.end());
int n = num.size();
int distance = INT_MAX;
for(int i = 0; i < n - 2; i++) {
if(i > 0 && num[i] == num[i-1]) {
continue;
}
int newTarget = target - num[i];
int dist = twoSumCloset(num, i + 1,n - 1, newTarget);
if(dist == 0) {
return target;
} else {
if(abs(dist) < abs(distance)) {
distance = dist;
}
}
}
return distance + target;
}
int twoSumCloset(const vector<int>& num, int start, int end, int target) {
int distance = INT_MAX;
while(start < end) {
int sum = num[start] + num[end];
int dist = sum - target;
if(abs(dist) < abs(distance)) {
distance = dist;
}
if (sum > target) {
while(num[end] == num[--end]);
} else if (sum == target) {
return 0;
} else {
while(num[start] == num[++start]);
}
}
return distance;
}
};
4/02/2014
Leetcode -- 3Sum Closest
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment