最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

 

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
 

提示:

3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4

思路:排序+双指针

时间复杂度:O(nlogn)+O(n2)=O(n2)

双指针:一个指针再作,一个指针在右,相互靠近

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int cha=INT_MAX,n=nums.size(),start,end,i(0),sum,finalsum;
        for(;i<(n-2);i++){
            start=i+1;
            end=n-1;
            do{
                sum=nums[i]+nums[start]+nums[end];
                //finalsum=sum;
                if(sum<target){
                    start++;
                    if((target-sum)<cha){
                         cha=target-sum;
                         finalsum=sum;
                    }                     
                }
                else if(sum==target)
                    return target;
                else{
                    end--;
                    if((sum-target)<cha){
                        cha=sum-target;
                        finalsum=sum;
                    }
                }
            }while(start<end);
        }
        return finalsum;
    }
};

 

posted @ 2020-06-24 00:06  江雨牧  阅读(101)  评论(0)    收藏  举报