3Sum Closest

来源:互联网 发布:淘宝口令红包怎么领 编辑:程序博客网 时间:2024/05/29 18:14


Given an array S of n integers, find three integers inS 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).


int threeSumClosest(vector<int> &num, int target){    const int MAX_INT = ((unsigned)(-1)>>1);    sort(num.begin(), num.end());    int min_ans = 0;    int min_val = MAX_INT;    for(int i = 0; i < (int)num.size() - 2; i++)    {        if(i >= 1 && num[i] == num[i-1])            continue;        int left = i + 1;        int right = num.size() - 1;        while(left < right)        {            if(left > i + 1 && num[left] == num[left - 1])            {                left++;                continue;            }            if(right < num.size()-1 && num[right] == num[right + 1])            {                right--;                continue;            }            if(num[i] + num[left] + num[right] < target)            {                int val = target - (num[i] + num[left] + num[right]);                if(val < min_val)                {                    min_val = val;                    min_ans = num[i] + num[left] + num[right];                }                left++;            }            else if(num[i] + num[left] + num[right] > target)            {                int val = (num[i] + num[left] + num[right]) - target;                if(val < min_val)                {                    min_val = val;                    min_ans = num[i] + num[left] + num[right];                }                right--;            }            else            {                min_ans = target;                min_val = 0;                left++;                right--;            }        }    }    return min_ans;}

0 0
原创粉丝点击