1. 程式人生 > >演算法分析與設計——LeetCode:16. 3Sum Closest

演算法分析與設計——LeetCode:16. 3Sum Closest

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        int first, second, third;
        int size = nums.size();
        int closest;
        int min;
        closest = nums[0]+nums[1]+nums[2];
        min = abs(target-closest);
        for (first = 0; first < size-2; first++) {
            int sum;
            second = first+1;
            third = size-1;
            while (second != third) {
                sum = nums[first]+nums[second]+nums[third];
                if (sum == target) {
                    return target;
                }
                int d = abs(target-sum);
                if (d < min) {
                    min = d;
                    closest = sum;
                }
                if (sum < target) {
                    second++;
                } else {
                    third--;
                }
            }
        }
        return closest;
    }
};