不爱施肥的小布

567 篇文章

已下架不支持订阅

473 篇文章

已下架不支持订阅

141 篇文章

已下架不支持订阅

题目解析

本题中能效k其实和果林面积fields[i]是强相关的,比如用例1中fields = [5,7,9,15,10]:

能效k取5的话,则面积5的果林只需要1天,其他大于面积5的果林需要Math.ceil(fields[i] / k)

能效k取7的话,则面积5、7的果林只需要1天,其他大于面积7的果林需要Math.ceil(fields[i] / k)

因此,k的取值范围其实就是果林最小面积min ~ 最大面积max之间,我们完全可以遍历min~max之间的所有可能给k,然后求出能效k施肥完所有果林需要的天数spend,然后求出spend===n的所有情况中最小的k作为题解。

但是,本题min~max之间有1 ≤ fields[i] ≤ 10^9,并且求解每种k对应的spend都需要遍历1 ≤ fields.length ≤ 10^4次,因此上面算法的时间复杂度是10^9 * 10^4 = 10^13,这是必然超时的。

因此,我们可以采用二分查找的方式来找k,即每次取min、max的中间值作为k,如果k能效需要的spend时间和指定天数n时间的关系:

  • spend > n:说明k能效太低了,花费的时间超过了n,因此要提高k,即min = k,这样下次二分查找的值就会增大k
  • spend < n:说明k能效太高了,花费的时间少于n,因此要降低k,即max = k,这样下次二分查找的值就会减小k
  • spend === n:说明k能效刚刚好,花费的时间等于n,但是此时可能并非最优解,我们还需继续找更小

已下架不支持订阅

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员阿甘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值