# 16 - 3Sum Closest

解法一 - 採用跟 #15 解法一類似的做法,只是改成用 minDiff 去 track 最接近 target 的 sum

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int res, minDiff = INT_MAX;
        sort(nums.begin(), nums.end());

        for(int i=0; i<nums.size(); i++) {
            int front = i+1;
            int back = nums.size()-1;

            while(front < back) {
                int sum = nums[i] + nums[front] + nums[back];
                int diff = abs(target - sum);

                if(diff < minDiff) {
                    minDiff = diff;
                    res = sum;
                }

                if(sum < target) {
                    front++;
                }
                else if(sum > target) {
                    back--;
                }
                else {
                    return target;
                }        
            }

            while(i+1<nums.size() && nums[i+1] == nums[i])
                i++;
        }

        return res;
    }    
};

Last updated