message: Update 3sum-closest.cpp
diff: class Solution {
  public:
  - /**
  - * @param numbers: Give an array numbers of n integer
  - * @param target: An integer
  - * @return: return the sum of the three integers, the sum closest target.
  - */
  - int threeSumClosest(vector<int> nums, int target) {
  - int ans = numeric_limits<int>::max();
  - int min_diff = numeric_limits<int>::max();
  -
  - // Make nums in increasing order. Time: O(nlogn)
  - sort(nums.begin(), nums.end());
  -
  - for (int i = 0; i < static_cast<int>(nums.size()) - 2; ++i) {
  - if (i == 0 || nums[i] != nums[i - 1]) { // Skip duplicated.
  - int j = i + 1;
  - int k = nums.size() - 1;
  -
  - while (j < k) { // Time: O(n) for each i.
  - const auto sum = nums[i] + nums[j] + nums[k];
  -
  - if (sum > target) { // Should decrease sum.
  - --k;
  - } else if (sum < target) { // Should increase sum.
  - ++j;
  + int threeSumClosest(vector<int>& nums, int target) {
  + sort(begin(nums), end(nums));
  + int result = 0, min_diff = numeric_limits<int>::max();
  + for (int i = size(nums) - 1; i >= 2; --i) {
  + if (i + 1 < size(nums) && nums[i] == nums[i + 1]) {
  + continue;
  + }
  + int left = 0, right = i - 1;
  + while (left < right) {
  + const auto& total = nums[left] + nums[right] + nums[i];
  + if (total < target) {
  + ++left;
  + } else if (total > target) {
  + --right;
  } else {
  return target;
  }
  -
  - if (abs(sum - target) < min_diff) {
  - min_diff = abs(sum - target);
  - ans = sum;
  - }
  + if (abs(total - target) < min_diff) {
  + min_diff = abs(total - target);
  + result = total;
  }
  }
  }
  -
  - return ans;
  + return result;
  }
  };
  