双指针问题Leetcode016最接近的三数之和(基于015题三数之和思想)

地址

https://leetcode-cn.com/problems/3sum-closest/submissions/

描述

在这里插入图片描述

思想

在这里插入图片描述

代码

class Solution {
    
    
public:
    int threeSumClosest(vector<int>& nums, int target) {
    
    
        //res.first存储与target的距离,second存储三数之和
        pair<int,int> res={
    
    INT_MAX,INT_MIN};
        sort(nums.begin(),nums.end());
        for(int i=0;i<nums.size();i++){
    
    
            for(int j=i+1,k=nums.size()-1;j<k;j++){
    
    
                //寻找>=target 的最小数
                while(k-1>j&&nums[i]+nums[j]+nums[k-1]>=target) k--;
                int sum=nums[i]+nums[j]+nums[k];
                res=min(res,make_pair(abs(sum-target),sum));
                //寻找<target 的最大数,
                if(k-1!=j){
    
    
                    sum=nums[i]+nums[j]+nums[k-1];
                    res=min(res,make_pair(abs(sum-target),sum));
                }
            }
            }
            return res.second;
        }
};

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121319164
今日推荐