1552. 两球之间的磁力
在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有
n
个空的篮子,第i
个篮子的位置在position[i]
,Morty 想把m
个球放到这些篮子里,使得任意两球间 最小磁力 最大。已知两个球如果分别位于
x
和y
,那么它们之间的磁力为|x - y|
。给你一个整数数组
position
和一个整数m
,请你返回最大化的最小磁力。
最大化最小值问题,用二分搜索解决,题目要求返回最大化的最小磁力,记为ans
,ans
就是任意两个篮子之间的最大可能距离和最小可能距离之间的某一个值。
那么这个问题就是在一个范围内寻找最优解的问题,那么通过二分搜索可以快速找到最优解。
既然要用二分,那么首先对position
进行排序,这样方便计算距离。接着确定二分搜索的左右边界,左边界为left=1
因为两个篮子之间至少可以有1的距离,
右边界设置为最远的两个篮子之间的距离right=position[n-1]-position[0]
,取这个区间的中间值mid
当前尝试的最小距离,判断mid
是否合法
,这是整个二分搜索中的重点。
判断mid
是否合法,就是判断当前的最小距离mid
是否可以满足将m
个球放入篮子中,使得任意两个球之间的距离都大于等于mid
。
遍历position
数组,从第一个篮子开始,如果当前篮子与上一个篮子之间的距离大于等于mid
,那么就可以将一个球放入这个篮子中,
同时更新上一个篮子的位置为当前篮子的位置。如果最后放入的球的数量大于等于m
,那么mid
是合法的,否则mid
不合法。
如果mid
合法,那么说明当前的最小距离可以更大,因此将左边界右移,否则将右边界左移。