最新华为上机考试
真题目录:点击查看目录
华为OD面试真题精选:点击立即查看
2025华为od机试双机位B卷
题目描述
在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为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
解题思路
这道题目是典型的区间合并问题,通过分析照明覆盖区间,计算未被覆盖的总长度。
问题理解
- N个路灯按100米间距安装在公路上,位置分别为0, 100, 200, …, (N-1)*100
- 每个路灯有照明半径,可照亮的范围是:[位置-半径, 位置+半径]
- 需要计算第一个路灯和最后一个路灯之间无法照明的区间长度和
解题思路
-
构建每个路灯的照明区间
- 对于第i个路灯,位置为i*100,照明半径为radius
- 照明范围左端点:max(i*100 - radius, 0),不能小于0
- 照明范围右端点:i*100 + radius
-
合并重叠区间
- 将所有照明区间按照左端点排序
- 如果当前区间与前一个合并区间重叠,则扩展前一个合并区间
- 如果不重叠,则将前一个合并区间加入结果,并开始新的合并区间
-
计算未覆盖长度
- 遍历合并后的区间列表
- 相邻区间之间的间隔即为未覆盖的长度
- 计算这些间隔的总

订阅专栏 解锁全文
7128

被折叠的 条评论
为什么被折叠?



