3Sum Closest

来源:互联网 发布:对冲平仓 知乎 编辑:程序博客网 时间:2024/06/04 18:20

Problem Description:

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).

Analyse:

这题和3sum的解法一样,可以用夹逼定理,不断缩小范围来定位和比较,重要的是不用去除重复。


Answer:

 int threeSumClosest(vector<int>& nums, int target){    sort(nums.begin(),nums.end());    int minx = abs(target - nums[1]-nums[0]-nums[2]);    int record = nums[0]+nums[1]+nums[2];    int gg = record;    for(int i = 0; i<nums.size(); i++)    {        int k = i+1,j = nums.size()-1;        while(k<j)        {            if(nums[i]+nums[j]+nums[k] == target)return target;            else if(nums[i]+nums[j]+nums[k]<target)            {                record = nums[i]+nums[j]+nums[k];                if(target - record < minx)                {                    minx = target - record;                    gg = record;                }                k++;            }            else            {                record = nums[i]+nums[j]+nums[k];                if(record - target<minx)                {                    minx = record - target;                    gg = record;                }                j--;            }        }    }    return gg;}