最大值最小化,最小值最大化问题(二分查找)

解析:在已给数组nums中寻找m个数,可以得到一个最小磁力。找哪m个数可以保证最小距离最大,所求即为最大的最小磁力。磁力=abs(nums[i]-nums[j])

所以所求有一个取值范围,即为1<=res<= max_nums-min_nums;其中max_nums是数组中的最大值,min_nums是数组中的最小值。

而且m跟所求有关系,m越大,放置的球越多,最小距离越小,最大的最小距离也就越小;m越小,放置的球越少,最小距离越大,最大的最小距离越大。所以,m越大,所求越小;m越小,所求越大。所以所求跟m有线性关系并且所求范围已知,就考虑到了二分查找。

代码:

 

总结:最大值最小化,最小值最大化可以考虑用二分查找。思路就是确定所求的取值范围,再就是分析单调性 。还要注意check函数的编写

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"最大化最小"或"最小化最大"问题的函数曲线一般是非常复杂的,因为目标函数可以是任意的函数。但是,我们可以通过一个简单的例子来理解这类问题的函数曲线。 假设我们要在一个一维数组中找到一个最大的数 x,使得数组中所有数都不小于 x。我们可以将这个问题转化为一个函数 f(x) 的形式,其中 f(x) 表示 "数组中所有数都不小于 x" 这个条件是否成立。具体地,如果数组中存在一个数小于 x,则 f(x) 为 false,否则 f(x) 为 true。 这个函数的曲线是一个阶梯状的函数,如下图所示: ``` | | | | | | | | |___|___|___|___ x1 x2 x3 x4 ``` 其中,每个竖直的线段表示一个数组元素,x1、x2、x3、x4 分别表示四个元素的,每个水平的线段表示函数为 true 的区间。例如,当 x 取在 [x3, x4] 区间内时,f(x) 的都为 true,因为数组中所有元素的都不小于 x3。 在这个例子中,我们要找到的最大的 x,就是最后一个函数为 true 的点所对应的 x ,即 x4。这个问题可以通过二分查找法解决,每次取中间,判断中间是否满足条件,然后不断缩小搜索区间,最终找到最大的 x 。 类似的,对于"最小化最大"问题,我们可以构造一个类似的函数,表示所有满足条件的最大是否小于等于 x。这个函数的曲线也是一个阶梯状的函数,但是是逆向的,即从右上方向左下方延伸。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值