[LeetCode] 16. 3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         int ret;
 5         
 6         sort(nums.begin(), nums.end());
 7         
 8         int mindiff = INT_MAX;
 9         
10         for (int i = 0; i < nums.size(); i++){
11             int left = i + 1;
12             int right = nums.size() - 1;
13             
14             while (left < right){
15                 if (abs(nums[i] + nums[left] + nums[right] - target) < mindiff){
16                     mindiff = abs(nums[i] + nums[left] + nums[right] - target);
17                     ret = nums[i] + nums[left] + nums[right];
18                 }
19                 if (nums[left] + nums[right] < target - nums[i]){
20                     left++;
21                 }else if (nums[left] + nums[right] > target - nums[i]){
22                     right--;
23                 }else{
24                     return target;
25                 }    
26             }
27         }
28         
29         return ret;
30     }
31 };
原文地址:https://www.cnblogs.com/amadis/p/5926497.html