s4553711
8/24/2017 - 2:24 PM

16.cpp

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        if (nums.size() < 3) return 0;
        int closest = nums[0] + nums[1] + nums[2];
        sort(nums.begin(), nums.end());
        for(int i = 0; i < nums.size() - 2; i++) {
            if (i > 0 && nums[i] == nums[i-1]) continue;
            int sec = i + 1;
            int thir = nums.size() - 1;
            while(sec < thir) {
                int cur = nums[i] + nums[sec] + nums[thir];
                if (cur == target) return cur;
                if (abs(target - cur) < abs(target - closest)) {
                    closest = cur;
                }
                if (cur > target)
                    --thir;
                else
                    ++sec;
                
            }
        }
        return closest;
    }
};