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

算法随笔_10: 供暖器

上一篇:算法随笔_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.kler.cn/a/508364.html

相关文章:

  • 【王树森搜索引擎技术】概要01:搜索引擎的基本概念
  • C#中无法在串口serialPort1_DataReceived启动定时器的解决方法
  • 【tailscale 和 ssh】当服务器建立好节点,但通过客户端无法通过 ssh 连接
  • 前端基础笔记
  • 如何在服务器同一个端口下根据路径区分不同的应用
  • python如何解析word文件格式(.docx)
  • Linux网络 TCP socket
  • 一体机cell服务器更换内存步骤
  • java 小红书源码 1:1还原 uniapp
  • 小识MySQL中的OLTP和OLAP
  • 全类别机器人传感器模块推荐
  • RK3568笔记七十五:FFMPEG交叉编译
  • Rnote:Star 8.6k,github上的宝藏项目,手绘与手写画图笔记,用它画图做笔记超丝滑,值得尝试!
  • 如何在 ASP.NET Core 中实现速率限制?
  • [JavaScript] 变量与数据类型:从基础到进阶
  • C++第十五讲:异常
  • 春秋杯-WEB
  • maven 微服务项目多 包版本问题
  • 【张雪峰高考志愿填报】合集
  • 职场沟通与行为
  • C++: : error: expected type-specifier before ‘;‘ token
  • 计算机网络 (43)万维网WWW
  • 2025年1月17日(点亮三色LED)
  • Three.js图像拼图技术
  • 奉加微PHY6230兼容性:部分手机不兼容
  • ElasticSearch下