leetcode-3Sum Closest

来源:互联网 发布:网络歌手曹菲儿 编辑:程序博客网 时间:2024/06/08 15:50

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).
bool compare(const int &a, const int &b){    return a<b;}class Solution {public:    int threeSumClosest(vector<int> &num, int target) {        int n = num.size();        int ret;        int gap;        sort(num.begin(),num.end(),compare);        ret = num[0]+num[1]+num[2];        gap = abs(ret-target);        for(int i = 0; i < n-1; i++)        {            if((i > 0)&&(num[i] == num[i-1]))continue;            int a = target-num[i];            int j = i+1;            int k = n-1;            while(k > j)            {                if(a == num[j]+num[k])                {                    return target;                }                else if(a > num[j]+num[k])                {                    if(a-num[j]-num[k] < gap)                    {                        gap = a - num[j]-num[k];                        ret = num[i]+num[j]+num[k];                    }                    j++;                    while((num[j]==num[j-1])&&(j < n))j++;                }                else                {                    if(num[j]+num[k]-a < gap)                    {                        gap = num[j]+num[k]-a;                        ret = num[i]+num[j]+num[k];                    }                       k--;                    while((num[k]==num[k+1])&&(k > -1))k--;                }            }        }        return ret;    }};


0 0
原创粉丝点击