猴子吃桃:玩转二分思维

前言

在计算机编程领域,算法是解决问题的有效途径之一。而算法题则是考察程序员解决问题能力的重要手段之一。在这篇文章中,我们将通过一个经典的算法题目——猴子吃桃,来探讨算法思维的重要性以及解题的方法。

题目描述

孙悟空喜欢吃蟠桃,一天他乘守卫蟠桃园的天兵天将离开了而偷偷的来到王母娘娘的蟠桃园偷吃蟠桃。

已知蟠桃园有 N 棵蟠桃树,第 i 棵蟠桃树上有 N[i](大于 0)个蟠桃,天兵天将将在 H(不小于蟠桃树棵数)小时后回来。

孙悟空可以决定他吃蟠桃的速度 K(单位:个/小时),每个小时他会选择一颗蟠桃树,从中吃掉 K 个蟠桃,如果这棵树上的蟠桃数小于 K,他将吃掉这棵树上所有蟠桃,然后这一小时内不再吃其余蟠桃树上的蟠桃。

孙悟空喜欢慢慢吃,但仍想在天兵天将回来前将所有蟠桃吃完。

求孙悟空可以在 H 小时内吃掉所有蟠桃的最小速度 K(K 为整数)。

输入描述:

从标准输入中读取一行数字,前面数字表示每棵数上蟠桃个数,最后的数字表示天兵天将将离开的时间。

输出描述:

吃掉所有蟠桃的 最小速度 K(K 为整数)或 输入异常时输出 -1。

示例 1:

输入:

3 11 6 7 
8

输出:

4

说明:
天兵天将8个小时后回来,孙悟空吃掉所有蟠桃的最小速度4。

第1小时全部吃完第1棵树,吃3个,
第2小时吃4个,第2棵树剩7个,
第3小时吃4个,第2棵树剩3个,
第4小时吃3个,第2棵树吃完,
第5小时吃4个,第3棵树剩2个,
第6小时吃2个,第3棵树吃完,
第7小时吃4个,第4棵树剩3个,
第8小时吃3个,第4棵树吃完。


题目分析

这道题目是一个典型的搜索问题,需要我们找到一个最小的速度 K,使得孙悟空能在规定的时间内吃掉所有的蟠桃。

原题为:875. 爱吃香蕉的珂珂
https://leetcode.cn/problems/koko-eating-bananas/description/

解题思路

我们可以通过二分查找的方式来确定孙悟空吃蟠桃的速度 K。首先,我们需要确定二分查找的搜索范围,最小速度 K 的下界是 1,最大速度 K 的上界是所有蟠桃中的最大数量。

对于每一个速度 K,我们可以计算出孙悟空吃完所有蟠桃需要的时间,然后将这个时间与规定的时间 H 进行比较。

  • 如果孙悟空需要的时间小于等于规定的时间,说明速度 K 可行,我们就可以将速度 K 的上界缩小;
  • 如果孙悟空需要的时间大于规定的时间,说明速度 K 不够快,我们就需要将速度 K 的下界增大。

代码实现

from typing import List
from loguru import logger


class Solution:
    def min_eating_speed(self, coiled_peach: List[int], h: int) -> int:
        if not coiled_peach or h < len(coiled_peach):
            return -1

        # 二分查找速度 K 的上界和下界
        left, right = 1, max(coiled_peach)
        while left < right:
            mid = (left + right) // 2
            if self.can_eat_all(coiled_peach, h, mid):
                right = mid
            else:
                left = mid + 1
        return left

    def can_eat_all(self, coiled_peach, h, K):
        """
        判断孙悟空在给定速度 K 的情况下是否能在规定时间 h 内吃完所有的蟠桃。

        Args:
            coiled_peach (list): 每棵蟠桃树上的蟠桃数量列表。
            h (int): 天兵天将回来的时间。
            K (int): 孙悟空吃蟠桃的速度。

        Returns:
            bool: 如果能在规定时间内吃完所有蟠桃,则返回 True,否则返回 False。
        """
        total_time = sum((num + K - 1) // K for num in coiled_peach)  # 记录吃完所有桃树的时间
        return total_time <= h


if __name__ == "__main__":
    s_instance = Solution()

    min_speed = s_instance.min_eating_speed(coiled_peach=[3, 11, 6, 7], h=8)
    logger.info(f"get min speed: {min_speed}")

    min_speed = s_instance.min_eating_speed(coiled_peach=[2, 3, 4, 5], h=3)
    logger.info(f"get min speed: {min_speed}")

    min_speed = s_instance.min_eating_speed(coiled_peach=[2, 3, 4, 5], h=4)
    logger.info(f"get min speed: {min_speed}")

    min_speed = s_instance.min_eating_speed(coiled_peach=[30, 11, 23, 4, 20], h=6)
    logger.info(f"get min speed: {min_speed}")

    min_speed = s_instance.min_eating_speed(coiled_peach=[30, 11, 23, 4, 20], h=5)
    logger.info(f"get min speed: {min_speed}")

输出结果为:

总结

通过二分查找的方法,我们可以高效地找到孙悟空吃蟠桃的最小速度 K。这种解题思路可以应用于类似的搜索问题,能够在保证时间效率的情况下得到正确的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/433630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密流程

现在&#xff0c;很多企业都依赖网络计算机的力量开展各项工作业务&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但网络也会搜集存储各个用户的信息便于统计分析&#xff0c;从而导致了企业的数据安全也会受到很大影响。近日&#xff0c;云天数据恢复中心接到多家企…

【阅读笔记】最通俗易懂的 transformer 笔记

这里写目录标题 前言第 1 节 N 元文法语言模型1.2、平滑&#xff08;Smoothing&#xff09;1.2.1、加 1 平滑 / 拉普拉斯平滑&#xff08;Add-One Smoothing / Laplace Smoothing&#xff09;1.2.2、 δ \delta δ 平滑&#xff08;Add-K Smoothing / Delta Smoothing&#xf…

Xilinx高级调试方法--远程调试

Xilinx高级调试方法--远程调试 1 虚拟电缆调试2 FPGA设计2.1 扩展配置接口 3 PCIe-XVC驱动3.1 PCIe-XVC驱动3.2 XVC-Server 4 Vivado Design Suite4.1 同一台主机4.2 不同主机 本文主要介绍Xilinx的一些高级调试方法&#xff0c;以及如何使用Xilinx的相关IP。 1 虚拟电缆调试 …

CAN通信篇 - CanSM模块配置(五)

文章目录 CanSMConfigurationCanSMManagerNetworkCanSMGeneralCanSMGeneration总结Can State Manager (CanSM)模块,是CAN网络的状态管理模块,所有对CAN网络状态的请求都是通过CanSM实现。这里我们介绍一下在Davinci Configurator中CanSM模块的配置。 在CanSM模块的总线管理…

游泳耳机哪个牌子好?四大热卖游泳耳机汇总,年度首选

在当今日益注重健康生活方式的时代&#xff0c;游泳作为一项全身性的有氧运动备受青睐。然而&#xff0c;对于许多游泳爱好者来说&#xff0c;水下世界的孤独可能会让他们感到无聊。而游泳耳机的出现不仅为游泳者带来了音乐的陪伴&#xff0c;还让他们能够在水下畅享各种声音&a…

【译】WordPress Bricks主题安全漏洞曝光,25,000个安装受影响

WordPress的Bricks主题存在一个严重的安全漏洞&#xff0c;恶意威胁行为者正在积极利用该漏洞在易受攻击的安装上运行任意PHP代码。 该漏洞被跟踪为CVE-2024-25600&#xff08;CVSS评分&#xff1a;9.8&#xff09;&#xff0c;使未经身份验证的攻击者能够实现远程代码执行。它…

【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制

目录 1.先理清一下概念 2.锁 2.1.分类 2.2.表锁 2.3.行锁&#xff08;MVCC&#xff09; 2.4.间隙锁 2.5.行锁变表锁 2.6.强制锁行 1.先理清一下概念 所谓并发控制指的是在对数据库进行并发操作时如何保证数据的一致性和正确性。在数据库中与并发控制相关的概念有如下几…

【企业动态】欢迎法国客户来访东胜物联,深入探讨智能化合作

本周&#xff0c;来自法国的客户莅临我司工厂进行实地参观考察。客户是一家历史悠久的设备供应商&#xff0c;其产品涵盖冷链、餐饮、农业等多个行业应用领域&#xff0c;正致力于从传统设备向智能设备转型&#xff0c;希望将设备接入物联网。在此次访问中&#xff0c;他们参观…

geoserver+mapbox-gl 离线部署矢量切片地图服务学习笔记

geoserver安装 geoserver的安装包可以在官网下载Download - GeoServer&#xff0c;想要选择版本点击Archived找到指定版本进行下载http://geoserver.org/download/ &#xff08;如果网络不稳定&#xff0c;也可以直接使用下面的下载地址&#xff09; geoserver-2.15.0.rar资…

从新手到专家:一探究竟,最佳的Excel学习网站推荐!

介绍&#xff1a;Excel是一款由微软公司开发的电子表格软件&#xff0c;是Microsoft Office套件的一部分。它通过网格形式的工作表提供数据存储、分析和可视化等功能&#xff0c;适用于个人计算机数据处理。具体介绍如下&#xff1a; 数据存储&#xff1a;Excel能够存储大量数据…

大语言模型(LLM):每个专业人士的完美助手

「大语言模型&#xff08;LLM&#xff09;革命」&#xff1a;ChatGPT如何引领工作效率新篇章 在不断发展的技术领域&#xff0c;像 ChatGPT 这样的大型语言模型 (LLM) 已成为各行业专业人士不可或缺的工具。 这篇博文探讨了大语言模型&#xff08;LLM&#xff09;在专业环境中的…

Linux第69步_依据“旧字符设备的一般模板”编写LED驱动

在编写LED驱动之前&#xff0c;先要了解和硬件有关的一些知识。 1、了解“MMU内存管理单元”以及相关函数 MMU是Memory Manage Unit的缩写&#xff0c;意思是“内存管理单元”。 老版本的Linux内核要求处理器必须有“MMU内存管理单元”&#xff0c;而现在的Linux内核已经支持…

车牌定位识别企业版

车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;采用YOLOV8NANO检测车牌区域&#xff0c;然后使用PADDLE OCR检测车牌&#xff0c;能识别各国车牌&#xff0c;支持C,PYTHON开发 车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;支持C,python

什么是云游戏?云游戏平台可以运行3A游戏吗?

对于不熟悉游戏行业的人来说&#xff0c;面对云游戏可能会有一个疑问——除了单机游戏&#xff0c;现在所有游戏不都是联网玩吗&#xff1f;云游戏和网络游戏有什么区别&#xff1f; 实际上&#xff0c;云游戏和传统网络游戏有着本质的不同。 传统网络游戏需要玩家先下载并在本…

【HTML】HTML基础7.1(无序列表)

目录 标签 属性 效果 注意 标签 <ul> <li>列表里要装的东西</li> <li>列表里要装的东西</li> <li>列表里要装的东西</li> </ul> 属性 type&#xff1a; circle空心圆disc实心圆square方框 效果 circle空心圆效果…

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络&#xff0c;无法从序列中学习到位置信息&#xff0c;并且它是并行结构&#xff0c;不是按位置来处理序列的&#xff0c;所以为输入序列加入了位置编码&#xff0c;将每个词的位置加入到了词向量中…

【hugggingface】批量加速下载HuggingFace上的模型

镜像网站及说明&#xff1a;https://hf-mirror.com/ 其他教程&#xff1a;如何快速下载huggingface模型——全方法总结 一、huggingface-cli方法下载 1.1安装依赖 pip install -U huggingface_hub1.2 设置环境变量 linux export HF_ENDPOINThttps://hf-mirror.comwindows …

如何挑选好的游泳耳机?游泳耳机的六大避坑指南!

游泳耳机是现代科技与运动健康完美结合的产物&#xff0c;对于热爱水上运动的朋友来说&#xff0c;一款好的游泳耳机不仅能让你在水中畅游时享受到音乐带来的乐趣&#xff0c;还能保护你的听力。然而&#xff0c;市场上琳琅满目的游泳耳机品牌和型号让人眼花缭乱&#xff0c;如…

08、MongoDB -- MongoDB 的 集合关联($lookup 和 DBRef 实现集合关联)

目录 MongoDB 的 集合关联演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 SQL 术语 与 Mongodb 的对应关系使用 $lookup 实现集合关联语法格式添加测试数据1、查询出订单数量大于6&a…

混沌工程-经典案例分享

目录 前言 案例 1、强弱依赖不合理 2、预案不生效 3、异常数据不兼容 4、监控体系缺陷 5、系统缺整体架构设计 总结 前言 我们公司从启动混沌工程到现在已经几乎覆盖了线上的所有核心业务&#xff0c;先后进行过2000次演练共挖掘出120个漏洞。这些漏洞有些得了及时修复…