和LeetCode这道题基本上一模一样,没有写过二分答案的同学可以先去写一下这道题:875. 爱吃香蕉的珂珂 - 力扣(LeetCode)\
首先,考虑一种没办法吃完所有桃树的情况,因为一次最多只能吃一棵桃树,如果桃树的总数量n比h还要大,那一定是不能满足条件的,直接输出0
即可
由于,吃的速度k越大,越容易满足条件,极端情况下,k取正无穷,是一定可以满足条件的,反之k越小,则越不容易满足条件,因此是符合单调性的,可以使用二分查找求解。
二分速度k,假设当前的速度为mid,则可以遍历数组,维护一个变量cnt表示吃完所有香蕉所需要的时间,对于x根香蕉来说,所需要的时间为midx上取整,因此累加midx+mid−1即可,最终判断是否有cnt≤h。
孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵蟠桃树,每棵树上都桃子,守卫将在 H 小时后回来。
孙悟空可以决定他吃蟠桃的速度 K (个/每小时),每个小时选一棵桃树,并从树上吃掉 K 个,如果K大于该树上所有桃子个数,则全部吃掉,并且这一小时剩余的时间里不再吃桃。
孙悟空喜欢慢慢吃,但又想在守卫回来前吃完桃子。
请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 K (K 为整数)。如果以任何速度都吃不完所有桃子,则返回 0。
第一行输入为 N个数字, N 表示桃树的数量,这 N 个数字表示每棵桃树上蟠桃的数量。
第二行输入为一个数字,表示守卫离开的时间 H。
其中数字通过空格分割, N、 H 为正整数,每棵树上都有蟠桃,且 0<N<10000,0<H<10000。
输出吃掉所有蟠桃的最小速度 K,无解或输入异常时输出 0。
输入
2 3 4 5
4
输出
5
输入
2 3 4 5
3
输出
0
输入
30 11 23 4 20
6
输出
23