zoukankan      html  css  js  c++  java
  • 875爱吃香蕉的珂珂

    题目:珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。  珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
    返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。
    链接:https://leetcode-cn.com/problems/koko-eating-bananas

    法一:自己的代码

    思路:对速度进行分割,与其它二分的区别是这里的是个函数,把速度传入返回时间进行比较,

    from typing import List
    import math
    class Solution:
        def minEatingSpeed(self, piles: List[int], H: int) -> int:
            s = sum(piles)
            # 最小速度是left,最大速度是right
            left = s // H
            if left == 0:
                return 1
            right = max(piles)
            # 计算速度x时,所用的时间
            def judge(x):
                # h是时间
                h = 0
                for i in piles:
                    # 这里向上取整
                    h += math.ceil(i / x)
                return h
            while left <= right:
                mid = (left + right) >> 1
                # 如果时间短,说明速度大,缩小右边界
                if judge(mid) <= H:
                    right = mid - 1
                # 否则速度小,增大左边界
                else:
                    left = mid + 1
            return left
    if __name__ == '__main__':
        solution = Solution()
        # result = solution.minEatingSpeed(piles = [3,6,7,11], H = 8)
        # result = solution.minEatingSpeed(piles = [8,8,8,8], H = 8)
        result = solution.minEatingSpeed(piles = [4], H = 8)
        print(result)
    View Code

    体会代码与69题,只是left和right的位置互换了,和返回的边界不同

    ttt

  • 相关阅读:
    高效读写的队列:ConcurrentLinkedQueue
    线程池的堆栈问题
    内部类(嵌套类)
    线程池的内部实现
    线程池
    线程阻塞工具类:LockSupport
    CountDownLatch(倒计时器)、CyclicBarrier(循环栅栏)
    ReentrantReadWriteLock(读写锁)
    ReentrantLock(重入锁)的好搭档:Condition 条件
    ReentrantLock
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12381077.html
Copyright © 2011-2022 走看看