首页 > 代码库 > [LeetCode] 16. 3Sum Closest

[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 };

 

[LeetCode] 16. 3Sum Closest