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