LeetCode 16. 最接近的三数之和

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int n=nums.size();
        pair<int,int> res(INT_MAX,0);//分别存储差值,和
        sort(nums.begin(),nums.end());
        for(int i=0;i<n;i++)
            for(int j=i+1,k=n-1;j<k;j++)
            {
                while(k-1>j&&nums[i]+nums[j]+nums[k-1]>=target)
                //找出满足三数之和≥target,k的最小值
                //试探k-1是否满足条件,需要保证k-1和j不重合
                    k--;
                int sum=nums[i]+nums[j]+nums[k];
                //此时k不一定保证三数之和≥target,也许找不到三数之和≥target,因此需要取绝对值
                res=min(res,make_pair(abs(sum-target),sum));
                if(k-1>j)
                {
                    sum=nums[i]+nums[j]+nums[k-1];
                    res=min(res,make_pair(target-sum,sum));
                    //这里不用取绝对值,三数之和一定<target
                }
            }
        return res.second;
    }
};
posted @   穿过雾的阴霾  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示