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