9.2华为OD机试真题 新系统 – 螳螂领地争霸 (JavaPyCC++JsGo)
2026 华为OD机试真题 9月2日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在一根很高的竹子上生活着一群螳螂,每只螳螂都有一段自己的势力范围,不同螳螂在竹子上的领地有可能重叠,当发现自己的领地内出现其它螳螂时就会战斗,失败一方领地会被胜利一方螳螂占领。
2026 华为OD机试真题 9月2日华为OD上机新系统考试真题 100 分题型
输入描述
给定一个螳螂领地信息 originalLand[i] 数组:originalLand[i] = [x, y] 表示第 i 只螳螂的领地在离地高度 [x,y] 之间的主干上 (x\<y)。螳螂的数量在 [1,50] 之间,螳螂领地坐标 [x,y] 中,0≤x\<y≤150。
输出描述
请返回领地斗争结束后螳螂们的领地信息。返回的领地信息数组中,按照领地坐标升序返回;正确示例:[[3,7],[9,13]],错误示例:[[9,13],[3,7]]。
示例1
输入
[[1,5],[4,6],[8,15]]
输出
[[1,6],[8,15]]
说明
第一只螳螂的领地范围 [1,5] 和第二只螳螂的领地范围 [4,6] 有重叠,因此两只螳螂在巡逻过程中会发生冲突,最终一只螳螂被打败,两只螳螂的领地被胜利者占有,领地范围变为 [1,6]。
示例2
输入
[[3,7],[9,13]]
输出
[[3,7],[9,13]]
说明
两只螳螂的领地范围没有重叠,因此不会发生冲突,所以最终的领地状态和最初的领地状态是一致的。
示例3
输入
[[1,4],[4,5]]
输出
[[1,5]]
说明
两只螳螂领地边界接触时也会触发冲突,形成领地合并。
解题思路
核心思想
把每只螳螂的领地看成一个闭区间。将所有区间按左端点升序排序后,从左到右线性扫描:
- 如果当前区间的左端点大于已合并区间的右端点,说明没有冲突,直接开启新区间;
- 否则说明存在重叠或端点接触,需要合并,把右端点更新为两者右端点的最大值。
算法步骤
- 将输入区间转成二维数组并按左端点、右端点排序。
- 取第一个区间作为当前合并段。
- 依次扫描后续区间:
- 若
x > last_end,加入一个新段; - 否则更新当前段的右端点
last_end = max(last_end, y)。
- 若
- 输出合并后的所有区间。
复杂度分析
设区间数量为 n。
- 时间复杂度:
O(n log n),来自排序。 - 空间复杂度:
O(n),用于存储区间
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/883
文章版权归作者所有,未经允许请勿转载。
THE END