通过率 60% · 提交 546 · 通过 326
小慕负责维护一条笔直公路上的照明系统。这条公路上安装了N个路灯,从位置0开始安装,相邻路灯之间间距固定为100米。每个路灯都有自己的,小慕需要计算第一个路灯和最后一个路灯之间,所有无法被任何路灯照亮的区间总长度。 注意:除了第一个和最后一个路灯,第i个路灯的照明范围为[100*i-r, 100*i+r],即照明半径表示该路灯在其前后方向都能照亮。
这类题属于华为 OD 机考真题方向中「100分 / 贪心」方向的高频题型,通常考察对「100分 / 贪心」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为一个数N,表示路灯个数,1 <= N <= 100000 第二行为N个空格分隔的数,表示路灯的照明半径,1 <= 照明半径 <= 100000*100
第一个路灯和最后一个路灯之间,无法照明的区间的长度和
示例 1
输入示例
2 50 50
输出示例
0
路灯1覆盖0-50,路灯2覆盖50-100,路灯1和路灯2之间(0米-100米)无未覆盖的区间。
示例 2
输入示例
4 50 70 20 70
输出示例
20
路灯1 覆盖0-50,路灯2 覆盖30-170,路灯3覆盖180-220,路灯4覆盖230-370。没覆盖的区域是170-180和220-230,一共20米。
示例 3
输入示例
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
这也是一个典型的区间类贪心问题,和题目【贪心】2024E-会议室占用时间 非常类似。
首先我们需要把所给的照明半径的数据转化为方便我们处理的区间格式。以示例二为例,如图所示。
很容易看到,每一个路灯的照明区间,是由其自身的位置和其照明半径确定的。对于索引为 i 的路灯,其位置为 100*i(路灯间隔固定为100),若其照明半径为 r,其照明区间容易计算得到 [100*i - r, 100*i + r]。
故对于长度为 n 的照明半径数组 rads,我们可以直接使用推导式构建得到每一个路灯对应的照明区间数组 intervals。代码为:
这就完成了对区间的数据预处理工作。
题目要求计算的是不能够照明得到的总距离。
容易发现这个问题和【贪心】2024E-会议室占用时间 非常类似。
在前一道题中,题目要求计算的是所有重叠区间合并后的结果,而本题要求计算的是所有重叠区间合并后,合并区间之间剩余的间隔总和。
因此两道题目的核心算法逻辑是一致的,唯一区别的地方是更新答案的写法有所不同。
我们只需要将前一题中的核心计算过程:
修改为:
换言之,在遍历所有区间的过程中,我们仍然要讨论上一个区间的结束位置 `pre_end` 和当前区间 `[start, end]` 的关系。当:
ans,令其增加 start - pre_end 的距离作为新增加的无法照明得到的距离,同时令 pre_end 更新为 end,作为后续区间的上一个区间结束位置。pre_end 和 end 之间的较大值。复杂度分析
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
4 120 20 20 50
输出示例
90
示例 4
输入示例
4 120 20 20 200
输出示例
0
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有