华为OD机试真题 新系统 2026-07-29 Python&JS 实现【消消乐能量碰撞】
目录
题目
题目内容:
在一个消除游戏中,一排不同能量值的能量球静止在网格中。当触发消除机制时,相邻能量球会发生碰撞。
如果两个能量球能量值不同,能量值较低的球会被能量值较高的球吞噬并消除。
如果两个能量球能量值完全相同,它们会同归于尽并同时消除。
给定初始能量球序列,请模拟消除过程,找出最终留在场上的能量球序列。
约束:能量球个数不超过 1000,能量值为非负整数且不超过 10000。
输入描述:
第一行输入整数 n,表示能量球数量。
第二行输入 n 个能量值,用英文逗号分隔。
输出描述:
输出最终留在场上的能量球序列,用英文逗号分隔;如果没有能量球留存,则输出空内容。
样例 1
输入:
5
3,5,5,2,3
输出:
3
说明:
3 被 5 吞噬,两个 5 同归于尽;随后 2 被 3 吞噬,最终剩下 3。
样例 2
输入:
6
1,2,2,1,3,4
输出:
4
说明:
1 被 2 吞噬,两个 2 同归于尽;后续 1 被 3 吞噬,3 又被 4 吞噬,最终剩下 4。
思路
整体思路:题目规则会让当前幸存能量球与后续能量球持续碰撞,因此只需要维护当前幸存值。
第一步:如果当前没有幸存球,则把新能量球作为幸存球。
第二步:如果新能量球更强,则原幸存球被吞噬,新能量球成为幸存球。
第三步:如果新能量球和幸存球相等,则两者同归于尽,幸存状态清空。
第四步:如果新能量球更弱,则会被当前幸存球吞噬,幸存状态不变。
边界处理:能量值允许为 0,所以不能用 -1 以外的有效值混淆;实现中使用空状态表示没有幸存球。
复杂度分析:只扫描一遍能量数组,时间复杂度 O(n),额外空间 O(1)。
Code
import sys
lines = [line.strip() for line in sys.stdin if line.strip()]
n = int(lines[0])
energy = list(map(int, lines[1].split(","))) if n else []
survive = None
for cur in energy:
if survive is None or cur > survive:
# 当前场上没有球,或新球能量更高时,它会成为后续碰撞的唯一幸存候选。
survive = cur
elif cur == survive:
# 能量相同对应题目的“同归于尽”,候选球和当前球都被消除。
survive = None
else:
# 当前球更弱时直接被候选球吞噬,场上状态不需要变化。
pass
# None 表示最终没有球留存,按题意输出空字符串而不是 0 或占位符。
print("" if survive is None else str(survive))
JS
const fs = require("fs");
const lines = fs.readFileSync(0, "utf8").trim().split(/\n/).map(s => s.trim());
const n = Number(lines[0]);
const energy = lines[1].split(",").map(Number);
let hasSurvive = false;
let survive = 0;
for (let i = 0; i < n; i++) {
const cur = energy[i];
if (!hasSurvive || cur > survive) {
// hasSurvive 表示场上是否有候选球;空场或更强新球都会刷新候选。
survive = cur;
hasSurvive = true;
} else if (cur === survive) {
// 能量相同对应同归于尽,候选球和当前球一起消失。
hasSurvive = false;
} else {
// 当前球更弱时被候选球吞噬,不会改变后续碰撞对象。
}
}
// 没有候选球留下时,最终留存序列为空,不能输出数字占位。
process.stdout.write(hasSurvive ? String(survive) : "");
【华为od机试真题Python+JS+Java+Go合集】【超值优惠】:Py/JS/Java/Go合集
【华为od机试真题Python】:Python真题题库
【华为od机试真题JavaScript】:JavaScript真题题库
【华为od机试真题Java&Go】:Java&Go真题题库
【华为od机试真题C++】:C++真题题库
【华为od机试真题C语言】:C语言真题题库
【华为od面试手撕代码题库】:面试手撕代码题库
【华为od机试面试交流群】【文章底部有二维码链接,可扫码加交流群】

华为OD机试:二本院校有机会吗? 有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。
更多推荐




所有评论(0)