首页 > 代码库 > 3Sum Closest

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> &num, int target ) { 4         int delta = INT_MAX; 5         sort( num.begin(), num.end() ); 6         for( int i = (int)num.size()-1; i > 1; --i ) { 7             int s = 0, e = i-1; 8             while( s < e ) { 9                 int sum = num[i] + num[s] + num[e];10                 if( sum == target ) {11                     return target;12                 } else if( sum < target ) {13                     ++s;14                 } else {15                     --e;16                 }17                 if( abs( sum-target ) < abs( delta ) ) { delta = sum - target; }18             }19         }20         return target + delta;21     }22 };

 

3Sum Closest