Loading

leetcode#16. 3Sum Closest

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

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).


class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        //我们需要:一个给定数,两个遍历数。那么就变成找两数之和的最值了
        long long result=INT32_MAX;
        sort(nums.begin(),nums.end());
        for(int i=0;i!=nums.size()-2;++i)//起码要三个数,最后2个没用
        {
            if(i>0&&nums[i]==nums[i-1]) continue;
            int new_target=target-nums[i];
            int j=i+1,k=nums.size()-1;
            while(j<k)
            {
                if (abs(nums[j] + nums[k] + nums[i] - target)<abs(result - target))
                    result = nums[j] + nums[k] + nums[i];
                if (nums[j] + nums[k]+ nums[i]>target) k--;
                else if (nums[j] + nums[k]+ nums[i]<target) j++;
                else return nums[j] + nums[k] + nums[i];
            }
};

 

posted @ 2018-09-28 20:53  老鼠阿尔吉侬  阅读(137)  评论(0编辑  收藏  举报