leetcode【数组】-----16. 3Sum Closest

版权声明: https://blog.csdn.net/zl6481033/article/details/88313040

1、题目描述

2、分析

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

        在此题之前,做过一道三数之和的题,那道题是求三数之和为0的三元组,这道题是求三数之和和target最接近,其实可以转化为相同的做法。需要三个数的和和给定的target的值之间的差的绝对值最小,那么需要定义一个变量abs来记录差的绝对值。先对数组排序,然后遍历数组,和三数之和的题很像,先确定一个数,然后用左右指针滑动来找另外两个数,每确定两个数,求出三数之和,然后算这个和和给定的值得差值的绝对值newabs,然后比较和abs的大小,并更新abs和res。

3、代码

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
         int res=nums[0]+nums[1]+nums[2];
         int abs_Res=abs(res-target);
  
        for(int i=0;i<nums.size()-2;++i){
            int left=i+1,right=nums.size()-1;
            while(left<right){
                int newres=nums[i]+nums[left]+nums[right];
                int newabs=abs(newres-target);
                if(abs_Res>newabs){
                    abs_Res=newabs;
                    res=newres;
                }
                if(newres>target){
                    --right;
                }
                else 
                    ++left;
            }
        }
        return res;
    }
};

4、涉及知识点

        还是关于数组,遇到数组的题,首先想需不需要排序,再考虑双指针。

猜你喜欢

转载自blog.csdn.net/zl6481033/article/details/88313040