能量对撞
2026 华为OD机试真题 7月29日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在一个充满魔法能量的消除游戏中,一排排不同颜色的能量球(代表不同质量/能量值)静止在网格中。当玩家触发消除机制时,相邻的能量球会发生相互碰撞。
2026 华为OD机试真题 7月29日华为OD上机新系统考试真题 100 分题型
消除规则:
- 碰撞机制:当两个相邻的能量球相遇时,系统会根据它们的能量值(质量)进行判断。
- 强弱判定:如果两个能量球的能量值不同,能量值较低的那个球会被对手的能量波吞噬,从而消除。
- 同归于尽:如果两个能量球的能量值完全相同,它们会引发剧烈的能量湮灭反应,导致两者同时被消除。
- 幸存条件:只有能量值足够高且未发生碰撞(或碰撞后存活)的能量球,才能留在场上继续等待下一轮消除。
题目目标:
给定一排初始的能量球序列,请模拟上述消除过程,找出最终留在场上的所有能量球及其顺序。
约束:
能量球的个数不超过 1000 个,能量球的能量值是非负整数,最大不超过 10000。
输入描述
输入共两行:
- 第一行输入整数
n,表示能量球数量。 - 第二行输入
n个整数,使用英文逗号分隔,表示初始能量球序列。
输出描述
输出最终留在场上的所有能量球序列,以数组形式表示,格式为 [b1,b2,...,bm]。
示例1
输入
5
3,5,5,2,3
输出
[3]
说明
- 遇到 3:场上空,3 上场。
- 当前场上:
[3]- 遇到 5:场上有 3。因为 5>3 (5比3大),3 被 5 吃掉。5 继续检查,场上空了,5 上场。
- 当前场上:
[5]- 遇到 5:场上有 5。因为 5==5 (两个一样大),5 和 5 同归于尽。
- 当前场上:
[](空)- 遇到 2:场上空,2 上场。
- 当前场上:
[2]- 遇到 3:场上有 2。因为 3>2 (3比2大),2 被 3 吃掉。3 继续检查,场上空了,3 上场。
- 当前场上:
[3]最终结果:场上只剩下一个 3。
示例2
输入
6
1,2,2,1,3,4
输出
[4]
说明
- 遇到 1:上场。
[1]- 遇到 2:场上有 1。2>1,1 被 2 吃掉。2 上场。
[2]- 遇到 2:场上有 2。2==2,2 和 2 同归于尽。
[]- 遇到 1:场上空,1 上场。
[1]- 遇到 3:场上有 1。3>1,1 被 3 吃掉。3 上场。
[3]- 遇到 4:场上有 3。4>3,3 被 4 吃掉。4 上场。
[4]最终结果:场上只剩下一个 4。
解题思路
核心思想
能量球从左到右依次进入场上。场上最后一个能量球最先和当前能量球发生碰撞,因此可以用栈模拟。
当当前能量球比栈顶更强时,栈顶被消除,当前能量球继续和新的栈顶碰撞;当二者相等时,双方同时消除;当栈顶更强时,当前能量球被消除。若当前能量球经历所有碰撞后仍存活,则入栈。
算法步骤
- 按示例格式读取两行输入:第一行
n,第二行按英文逗号切分得到能量数组。 - 初始化空栈
stack。 - 从左到右遍历每个能量球
energy。 - 若栈非空且当前能量球仍存活,则与栈顶比较:
stack[-1] < energy:栈顶被消除,当前球继续比较。stack[-1] == energy:栈顶和当前球同时消除。stack[-1] > energy:当前球被消除。
- 如果当前球最终仍存活,将其压入栈。
- 遍历结束后,栈中元素就是最终剩余能量球。
复杂度分析
设能量球数量为 n。
- 每个能量球最多入栈一次、出栈一次,时间复杂度为
O(n)。 - 栈最多保存
n个能量球,空间复杂度为 `O(
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/754
文章版权归作者所有,未经允许请勿转载。
THE END