leetcode 2616. 最小化数对的最大差值

【C++贪心 二分查找 最大值最小化】2616. 最小化数对的最大差值|2155 给你一个下标从 0 开始的整数数组 nums 和一个整数 p 。请你从 nums 中找到 p 个下标对,每个下标对对应数值取差值,你需要使得这 p 个差值的 最大值 最小。同时,你需要确保每个下标在这 p 个下标对中最多出现一次。 对于一个下标对 i 和 j ,这一对的差值为 |nums[i] - nums[j]| ,其中 |x| 表示 x 的 绝对值 。 请你返回 p 个下标对对应数值 最大差值 的 最小值 。 阅读详情

在这里插入图片描述

在数组nums中找到p个数对,使差值绝对值的和最小。

思路:

最小差值应该是数值相近的一对数之间产生,让数值相近的数字尽量靠在一起方便计算,所以需要排序。
这里不去直接考虑一对对的数字,而是直接考虑差值的取值。

用binary search搜索一个差值。
左边界是0,右边界就是nums中的最大值 - 最小值(nums排序后最右边数字 - 最左边数字)。

确定mid = 差值,那么一对数字的差的绝对值如果 <= 这个差值,就说明满足,
遍历数组nums, 计算满足 <= 差值的数字有多少对,记为cnt对,
如果cnt >= p, 说明差值在mid内的数字对能达到p个,可以进一步缩小差值,right= mid.
反之需要left = mid+1.

class Solution {
    int n = 0;
    public int minimizeMax(int[] nums, int p) {
        n = nums.length;
        Arrays.sort(nums);
        int left = 0;
        int right = nums[n-1] - nums[0];

        while(left < right) {
            int mid = left + (right - left) / 2;
            if(canMakePairs(mid, nums, p)) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }

    boolean canMakePairs(int mid, int[] nums, int p) {
        int cnt = 0;
        for(int i = 0; i < n-1 && cnt < p;i++){  //在这里限制cnt<p,因为p可以是0
            if(nums[i+1] - nums[i] <= mid) {
                cnt ++;
                i ++;  //加上for里面的i++,相当于i向右移动2位
            }
        }
        return cnt >= p;
    }
}
数组中数对差最大 数组中某数字减去其右边的某数字得到一个数对之差,求所有数对之差的最大值。 立即下载

相关推荐

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1126

LeetCode 2016. 增量元素之间的最大差值题解

2016. 增量元素之间的最大差值题解 题目来源:2016. 增量元素之间的最大差值 2022.02.26 每日一题 每日一题专栏地址:LeetCode 每日一题题解更新中❤️💕

小明不要写Bug的博客 278

一种高超声速飞行器弹道的仿真方法

设计并实现了一个高超声速飞行器弹道仿真算法,并应用到基于OSGEarth的态势中。

eyepeak的博客 6541

LeetCode简单题之增量元素之间的最大差值

题目 给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。 返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。 示例 1: 输入:nums = [7,1,5,4] 输出:4 解释: 最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。 注意,尽管

Lonery的博客 508

从‘最长白列’到‘八邻域’:智能车图像巡线算法怎么选?我的踩坑经验分享

本文深入探讨了全国大学生智能汽车竞赛中图像巡线算法的选型与优化,对比了最长白列法、八邻域算法等五种主流方法的性能与适用场景。通过实战数据和代码示例,分析了各算法在直道、弯道及特殊赛道元素中的表现,并提供了内存优化、参数调整等实用技巧,帮助参赛团队提升智能车的巡线精度与效率。

weixin_30374009的博客 632

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

LeetCode第2616题-最小化数对的最大差值-python实现-图解思路与手撕代码

LeetCode第2616题-最小化数对的最大差值-python实现-图解思路与手撕代码

weixin_45271005的博客 328

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 445

最小化数对的最大差值

给你一个下标从 0 开始的整数数组 nums 和一个整数 p。请你从 nums 中找到 p 个下标对,每个下标对对应数值取差值,你需要使得这 p 个差值的。同时,你需要确保每个下标在这 p 个下标对中最多出现一次。对于一个下标对 i 和 j ,这一对的差值为 |nums[i] - nums[j]| ,其中 |x| 表示 x 的。请你返回 p 个下标对对应数值的。示例 1:输入:nums = [10,1,2,7,1,3], p = 2输出:1。

creazypeople的博客 815

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 402

多agv系统调度的MATLAB仿真

从起点出发,到货物点领取货物最后到卸货点,以完成任务总时间最短为目标进行单目标优化,约束条件为,任务不冲突,路径不冲突,要能实现路径规避 ,4-6台agv一起工作。左右货架间隔可通过1个agv,上下货架间隔可通过两个agv,通道为双向行驶通道。一台agv只能带一个货物,优化目标为完成任务总的时间最短,agv的速度是匀速,转弯也不会减速,取货物时间为固定值。上面的图里面货物看为正方形跟agv一样的长度大小,agv试做是跟货物一样大小的正方形agv的速度是每秒1个车身。多台agv一起完成...

FPGA/MATLAB学习教程/源码/项目合作开发 7563

leetcode 2616. 最小化数对的最大差值 中等

最大差值为 max(|nums[1] - nums[4]|, |nums[2] - nums[5]|) = max(0, 1) = 1。所以我们返回 1。选择下标 1 和 3 构成下标对。差值为 |2 - 2| = 0 ,这是最大差值的最小值。第一个下标对选择 1 和 4 ,第二个下标对选择 2 和 5。个下标对,每个下标对对应数值取差值,你需要使得这。同时,你需要确保每个下标在这。个下标对中最多出现一次。

2401_88085478的博客 569

FPGA上的时间数字转换器(TDC):详细概述及FPGA开发

本文对基于FPGA的时间数字转换器(TDC)进行了详细的概述,并提供了一个简单的示例代码,展示了如何在FPGA上实现TDC功能。在本文中,我们将详细概述基于FPGA的TDC,并提供相应的源代码示例,以帮助读者理解和实现这一功能。需要注意的是,这只是一个简单的示例,实际的TDC设计可能需要更多的功能和优化,以满足特定的需求。读取和重置:最后,测量结果可以通过读取计数器的值来获取,并且在每次读取后需要将计数器重置为零,以便进行下一次测量。TDC的基本原理是测量信号的到达时间与参考时钟之间的时间差。

EsqpWeller的博客 6861

力扣 2616. 最小化数对的最大差值 题解

注意此题 p 是给的下标对的个数,若为1,则找2个下标,为2,则找2个下标对,再求这两个下标对中差值最小的那个差值。1,先假设定义最小差值为0,因为是绝对值,最大为整理后的最后一个数减开头一个数。是这个给的数组里面,最大的那个数和最小的那个数相减的绝对值叫做最大差值。2,之后就要不断二分缩小范围,更新最小差值left和最大差值right。而最小值是什么意思是找这给的这么多对里面的最小的那个差值。3,条件有限制,要满足p对,所以要额外加条件。而这个最大差值的最小值是啥意思呢?

2501_90651890的博客 415

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

(nice!!!)(LeetCode 每日一题) 2616. 最小化数对的最大差值 (二分查找)

【代码】(nice!!!)(LeetCode 每日一题) 2616. 最小化数对的最大差值 (二分查找)

记录一些刷过的题并分享学习心得 377

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

每日算法刷题Day25 6.7:leetcode二分答案3道题,用时1h40min(遇到两道动态规划和贪心时间较长)

3.我的思路是dfs取搜索,但是会存在重复子问题(比如连续两个房屋都可以偷,但他们后面偷的房屋都一样,连续的第2个就要再求解重复子问题了),会超时,所以要用动态规划来消除冗余,解决重复子问题。2.单调性检验:二分答案的是体力消耗值(最大高度差绝对值),如果它越小,越不容易满足条件,所以有个最小值,而一旦一个值满足条件,大于它的值一定满足条件,符合单调性。2.单调性检验:二分答案是偷窃能力,偷窃能力越小,越不容易偷到k间房屋,所以存在一个最小值,而一旦一个值满足条件,大于它的值肯定满足条件,符合单调性。

2301_80044595的博客 1258

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[二分答案:最大化最小值]2616. 最小化数对的最大差值

【代码】[二分答案:最大化最小值]2616. 最小化数对的最大差值。

m0_46322965的博客 378

【力扣周赛】第340场周赛

【力扣周赛】第340场周赛

❀雾里看花花里看雾❀ 218

[LeetCode周赛复盘] 第 340 场周赛20230409

这周都还挺难的。T1 判断质数。T2 预处理+前缀和+二分。T3 二分答案。T4 并查集优化剪枝转移状态的BFS(和上周一样)。

liuliangcan的博客 476

LeetCode 每日一题 2025/6/9-2025/6/15

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 348

LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

大家好,我是小彭。上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格。虽然竞赛算法题的文章受众非常小,但却有很多像我一样的初学者,他们有兴趣参加但容易被题目难度和大神选手的题解劝退。考虑到这些跟我一样的小白,我决定算法题解风格会向这些初学者倾斜,我们不会强调最优解法,而是强调从题意分析到问题抽象,再从暴力解法一步步升级到最优解法的推导过程,希望能帮到喜欢算法的朋友,向 Guardian 出发。

pengxurui的博客 1283

leetcode刷题类型

【代码】leetcode刷题类型。

weixin_53102215的博客 269

Leetcode hot100 Java刷题(一)

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。所有当前右端点, 符合条件的子数组 有 min(minI,maxI)−i0个。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。i0表示 离当前右端点最近 的 不在 [minK,maxK]范围的 位置。上面这个解法不符合要求,用了除法,并且空间复杂度不是O(1)

开心星人的博客 1178

Python 小白的 Leetcode Daily Challenge 刷题计划 - 20230809

【代码】Python 小白的 Leetcode Daily Challenge 刷题计划 - 20230809。

weixin_50011798的博客 121

二分查找算法

红蓝染色法(根据求最小和最大有所差异)-》循环不变量:决定了返回值。所以可能的答案构成了解空间,进而用来初始化左右边界。

qq_51224286的博客 185
上一篇: leetcode 46. Permutations(排列)
下一篇: yolov8seg 瑞芯微RKNN部署
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值