首页 > 编程语言 > 详细

力扣875题(二分查找算法应用)

时间:2021-05-25 09:13:52      阅读:24      评论:0      收藏:0      [点我收藏+]

875、koko吃香蕉

基本思想:

二分查找算法

具体实现:

如果珂珂能以 K 的进食速度最终吃完所有的香蕉(在 H 小时内),那么她也可以用更快的速度吃完。

当珂珂能以 K 的进食速度吃完香蕉时,我们令 possible(K) 为 true,那么就存在 X 使得当 K >= X 时, possible(K) = True。

举个例子,当初始条件为 piles = [3, 6, 7, 11] 和 H = 8 时,存在 K= 4 使得 possible(1) = possible(2) = possible(3) = False,且 possible(4) = possible(5) = ... = True。

hi是香蕉堆中最大的那堆,也是珂珂一个小时中能吃的最多的香蕉。

(p-1) / K + 1 吃的某一堆香蕉需要的时间

代码:

寻找左侧边界的二分搜索

class Solution(object):
    def minEatingSpeed(self, piles, H):
        # Can Koko eat all bananas in H hours with eating speed K?
        def possible(K):
            return sum((p-1) / K + 1 for p in piles) <= H

        lo, hi = 1, max(piles)
        while lo < hi:
            mi = (lo + hi) / 2
            if not possible(mi):
                lo = mi + 1
            else:
                hi = mi
        return lo

 

力扣875题(二分查找算法应用)

原文:https://www.cnblogs.com/zhaojiayu/p/14806733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!