算法随笔_10: 供暖器

news/2025/1/18 10:55:39/

上一篇:算法随笔_9:压缩字符串-CSDN博客

题目描述如下:

冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。

在加热器的加热半径范围内的每个房屋都可以获得供暖。

现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。

注意:所有供暖器 heaters 都遵循你的半径标准,加热的半径也一样。

示例 1:

输入: houses = [1,2,3], heaters = [2]
输出: 1
解释: 仅在位置 2 上有一个供暖器。如果我们将加热半径设为 1,那么所有房屋就都能得到供暖。

算法思路:

题目要求我们求出最小的加热半径来为所有的房屋供暖。因此,每个房屋要尽可能的离供暖器近。换句话说,每个房屋要找到离它最近的那个供暖器,并计算出距离,我们可以设一个数组heat_near。最后取这个数组的最大值就是本题的答案。

一般对于在数组里查找某个特定条件下的值的情况,我们优先想到的就是二分查找,也叫折半查找。二分查找的前提需要这个数组是有序的。所以我们先把heaters数组进行一下升序排列。

接下来我们需要先找到紧邻房屋house左侧的那个供暖器,我们设它的下标为heat_near_left。

算法如下:

1. 我们计算出供暖器数组中间位置的暖器位置heat_mid。

2. 如果heat_mid小于house,意味着我们需要在右半个区间继续寻找紧邻房屋house左侧的那个暖器。重复步骤1,2。如果heat_mid大于house,我们需要在左半个区间重复步骤1,2。注意:步骤1中的暖气数组此时变为左半区间,或右半区间。

3. 持续折半后,最终会找到紧邻房屋house左侧的那个暖器的下标heat_near_left。

那么紧邻房屋house右侧的那个暖器的下标为即为heat_near_left+1。分别计算这两个下标的元素到当前house的距离dist_left, dist_right。最终,当前房屋最近的供暖器的距离为min(dist_left, dist_right)。

当得出全部房屋最近的供暖器的距离时,取最大值即为题目的答案。


http://www.ppmy.cn/news/1564128.html

相关文章

2025年01月14日Github流行趋势

1. 项目名称:MoneyPrinterV2 项目地址url:https://github.com/FujiwaraChoki/MoneyPrinterV2项目语言:Python历史star数:4534今日star数:173项目维护者:FujiwaraChoki, supperfreddo, TomyDiNero, SUTFutu…

加菲工具格式化XML:让数据呈现更清晰

加菲工具格式化XML:让数据呈现更清晰 在处理XML文件时,我们常常会遇到格式混乱、难以阅读的情况,这给数据的分析和处理带来了诸多不便。而加菲工具的XML格式化功能,就像是一位专业的数据整理师,能够迅速将杂乱无章的X…

G1原理—7.G1的GC日志分析解读

大纲 1.TLAB的GC日志解读 2.YGC的GC日志解读 3.模拟YGC(单次GC及多次GC的不同场景) 4.打开实验选项查看YGC的详情日志信息 5.Mixed GC日志信息之初始标记过程 6.Mixed GC日志信息之混合回收过程 7.Mixed GC日志信息之Region的详细信息和标记过程的详细信息 8.FGC的日志…

Android 实现多语言功能

这几天看到了小红书上有大量TikTok用户涌入,app端上外国用户描述的英文信息,因此想着研究一下Android端如何实现多语言功能,以下用一个最简单的demo演示一下: 1. 创建不同语言的资源文件 英语资源文件 (res/values/strings.xml):…

43.Textbox的数据绑定 C#例子 WPF例子

固定最简步骤,包括 XAML: 题头里引入命名空间 标题下面引入类 box和block绑定属性 C#: 通知的类,及对应固定的任务 引入字段 引入属性 属性双触发,其中一个更新block的属性 block>指向box的属性 从Textbo…

NVIDIA 下 基于Ubuntun20.04下 使用脚本安装 ros2-foxy 和 使用docker安装 ros2-foxy

一、前提介绍: 本文主要采用两种方式在NVIDIA 下基于 Ubuntun20.04安装 ros2-foxy。 使用环境: NVIDIA 为 Jetson 系列下 Jetson Xavier NX; Ubuntun版本:20.04 二、安装方法: 1、使用脚本编译方式: 使…

AttributeError: ‘super‘ object has no attribute ‘__sklearn_tags__‘

最近用sklearn跑Stacking,基学习器是XGBoost、LightGBM、CatBoost。运行的时候报了标题的这个错误。 应该是sklearn的版本高了,需要降级处理。报错时的版本号是1.6.0 ,可以降级到1.5.2。直接运行下面的代码就行。 !pip uninstall -y scikit…

【Redis】Redis大key的危害及解决方案分享

文章目录 一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危害六、大key检查与发现6.1 使用 --bigkeys参数6.2 使用scan命令6.3 使用 memory 命令查看 key 的大小6.4 使用 Rdbtools 工具包6.5 代码埋点6.6 公有云的Redis分析服务 七、大ke…