leetcode: 3Sum Closest

来源:互联网 发布:网络被劫持怎么解决 编辑:程序博客网 时间:2024/06/05 06:26

和3Sum这题思路一样。同样的搜索方式,也是首先要排序。需要我们维护当前的最近距离并记录最近距离时的和,返回即可。  代码是在上一题上修改的

class Solution {public:    int threeSumClosest(vector<int> &num, int target) {        sort( num.begin(),num.end() );        int Max = 99999999;        int res;        for( int i=0;i<num.size();i++ )        {            while( i>0 && num[i] == num[i-1] )            {                i++;            }            int j=i+1,k=num.size()-1;            while( j<k )            {                while( j>i+1 && num[j] == num[j-1] )                {                    j++;                }                while( k<num.size()-1 && num[k] == num[k+1] )                {                    k--;                }                if( j>= k )                {                    break;                }                if( abs(num[i]+num[j]+num[k]-target)<Max )                {                    Max = abs(num[i]+num[j]+num[k]-target);                    res = num[i]+num[j]+num[k];                }                if( num[i]+num[j]+num[k] > target )                {                    k--;                }                else if( num[i]+num[j]+num[k] < target )                {                    j++;                }                else                {                   break;                }            }        }        return res;            }};


0 0