力扣 2616. 最小化数对的最大差值 题解
本题我讲二分法:
此题我认为最大的问题是看不懂题目意思:
注意此题 p 是给的下标对的个数,若为1,则找2个下标,为2,则找2个下标对,再求这两个下标对中差值最小的那个差值
而这个最大差值的最小值是啥意思呢?
是这个给的数组里面,最大的那个数和最小的那个数相减的绝对值叫做最大差值
而最小值是什么意思是找这给的这么多对里面的最小的那个差值
对于解法:
1,先假设定义最小差值为0,因为是绝对值,最大为整理后的最后一个数减开头一个数
2,之后就要不断二分缩小范围,更新最小差值left和最大差值right
3,条件有限制,要满足p对,所以要额外加条件
代码如下:
解释在下方
while 循环使得中间每个差值都能得到遍历,里面定义中间值,传入mid到相应函数若此中间差值满足里面有p对下标,且其最大差值都小于这个中间差值,则返回真,之后使右边最大差值缩放为中间差值减一,因为为左右闭区间二分,右边封闭,若不满足,则可用说明里面的此时的最大差值为上一次循环的mid,已经缩放到了最小,或者是里面p对的对数小于p,则使得下一次的mid往相对于此次mid再往右偏移一半再去找,下一次循环p的对数肯定会增加,,且下一次mid肯定会比次层mid的值更大,从而不断缩放缩放,直到左边差值大于右边差值,说明将所有差值遍历完毕,直到找到最小的left返回