当前位置: 首页 > news >正文

二分查找(数值范围)--- koko吃香蕉

来源:leedcode.875

题目描述:
    珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。
    珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。

    每个小时,她将会选择一堆香蕉,从中吃掉 k 根。
    如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 
    珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
    求解她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。

思路:

  •     k 的最小值 1,最大值 max(piles)(一次性吃完最多的堆)
  •     二分 k,检查是否能在 h 小时内完成
  •     计算所需时间:time = sum(ceil(pile / mid))

”选速度k,判断时间;吃得慢就要加快速度“

理解点:

  • 怎么用代码实现满足:”如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉“ ---- ceil() 向上取整

import math


def minEatingSpeed(piles, h):
    left, right = 1, max(piles)

# 这部分用于解决 --> "如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉” -- ceil()
    def canFinish(k):
        return sum(math.ceil(pile / k) for pile in piles) <= h  

    while left < right:
        mid = (left + right) // 2
        if canFinish(mid):
            right = mid  # 继续尝试更小的 k
        else:  # 吃太慢了,提高速度
            left = mid + 1  # 增大 k, 继续尝试

    return left  # 最小满足条件的 k


piles = [3, 6, 7, 11]
h = 8

# piles = [30,11,23,4,20]
# h = 5

# piles = [30,11,23,4,20]
# h = 6

print(minEatingSpeed(piles, h))  # 输出: 4

逻辑解释: 

http://www.dtcms.com/a/38833.html

相关文章:

  • 【转:由Salesforce的元数据驱动引发的联想】
  • X64 TF位和Single-step单步调试的研究
  • 渗透第二次作业
  • spring结合mybatis多租户实现单库分表
  • 洛谷-新二叉树python
  • Flink SQL怎么用?
  • 深度学习模型可视化:通俗易懂的全面解读
  • 基础算法整理
  • C++20 三路比较运算符 `<=>` 与 `operator==() = default` 的深度剖析及实际应用
  • VUE向外暴露文件,并通过本地接口调用获取,前端自己生成接口获取public目录里面的文件
  • Linux进程控制
  • leetcode 73. 矩阵置零
  • 鸿蒙新版开发工具DevEco Studio不能新建模拟的解决方法
  • 两台互通的服务器使用Docker部署一主两从MySQL8.0.35
  • 【Qt】为程序增加闪退crash报告日志
  • Nginx面试宝典【刷题系列】
  • 广州无人机考试培训收费标准(附报名流程)
  • 【开源免费】基于SpringBoot+Vue.JS美食烹饪互动平台(JAVA毕业设计)
  • python 剪切音频
  • [特殊字符]️ ‌Selenium元素存在性判断的5种方法‌
  • 归纳总结一下Tensorflow、PaddlePaddle、Pytorch构建神经网络基本流程,以及使用NCNN推理的流程
  • 快速上手 Uniapp:从入门到精通的捷径
  • css 设置svg文字的对齐方式。右对齐
  • 五、Redis哨兵监控
  • Halcon 颜色分割算子、RGB和HSV之间的转换
  • 基于STM32的智能垃圾分类与回收系统
  • Go红队开发—并发编程
  • 数据结构:二叉树的数组结构以及堆的实现详解
  • C++之继承详解
  • pikachu