Leetcode 16. 最接近的三数之和 模拟

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

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

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

 跟求三数之和差不多,甚至感觉比三数之和简单,因为有相等的情况直接返回target就可以了。。。

思路跟三数之和差不多,只是在三数之和上加了根据abs(ans-target)与abs(Sum-target)的大小判断是否更新ans值。。。

代码如下:
 

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
         int Size=nums.size();
         sort (nums.begin(),nums.end(),less<int>());
         if(Size<3)
             return 0;
         int ans=0x3f3f3f3f;
         for (int i=0;i<Size-2;i++)
         {
             if(i&&nums[i]==nums[i-1])
                 i++;
             int j=i+1,k=Size-1;
             while (j<k)
             {
                 int Sum=nums[j]+nums[k]+nums[i];
                 if(Sum>target)
                 {
                     if(abs(ans-target)>Sum-target)
                           ans=Sum;
                     k--;
                 }
                 else if(Sum<target)
                 {
                     if(abs(ans-target)>target-Sum)
                            ans=Sum;
                     j++;
                 }
                 else 
                     return target;
             }
         }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41410799/article/details/82710691