华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

article/2025/9/6 16:15:49

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《告警抑制》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:告警抑制


  1. 知识点:字符串处理、哈希映射(逻辑处理)
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

告警抑制是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后,低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。

输入描述

  1. 第一行为数字 N,表示告警抑制关系个数(0 ≤ N ≤ 120)。
  2. 接下来 N 行,每行由空格分隔的两个告警ID(格式:大写字母+0或1个数字),例如 A B,表示 A 抑制 B
  3. 最后一行为告警产生列表,列表长度范围为 [1,100],告警ID间以空格分隔。

输出描述
真实产生的告警列表(未被抑制的告警),按输入顺序输出,ID间以空格分隔。

示例
输入:

2  
A B  
B C  
A B C D E  

输出:

A D E  

解释

  • A 抑制 BB 抑制 C,因此 BC 被抑制,最终输出 A D E
补充规则
  1. 无循环抑制:不会出现 A→B→A 的循环关系。
  2. 无传递抑制:例如 A→B→C 时,A 不直接抑制 C,但被抑制的 B 仍可抑制 C
  3. 位置无关:被抑制的告警无论在高优先级告警的前后,均被屏蔽。

Java

问题分析

我们需要根据给定的告警抑制关系和原始告警列表,输出实际产生的未被抑制的告警列表。高优先级告警会抑制低优先级告警,无论它们在输入列表中的顺序如何。

解题思路

  1. 建立抑制关系映射:记录每个告警被哪些高优先级告警抑制。
  2. 快速判断抑制存在性:通过集合快速检查某个告警是否存在于输入列表中。
  3. 遍历原始告警列表:对于每个告警,检查是否存在抑制它的告警存在于输入列表中,若存在则过滤,否则保留。

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = Integer.parseInt(scanner.nextLine()); // 读取抑制关系个数// 建立抑制关系映射表:key是被抑制的告警,value是抑制它的告警集合Map<String, Set<String>> suppressionMap = new HashMap<>();for (int i = 0; i < N; i++) {String[] parts = scanner.nextLine().split(" ");String suppressor = parts[0]; // 抑制者,例如AString suppressed = parts[1]; // 被抑制者,例如Bif (!suppressionMap.containsKey(suppressed)) {suppressionMap.put(suppressed, new HashSet<>());}suppressionMap.get(suppressed).add(suppressor);}// 读取原始告警列表,并转换为集合用于快速查询String[] alerts = scanner.nextLine().split(" ");Set<String> inputSet = new HashSet<>(Arrays.asList(alerts));List<String> result = new ArrayList<>(); // 保存未被抑制的告警for (String alert : alerts) {boolean isSuppressed = false;// 检查当前告警是否有抑制者存在于输入列表中if (suppressionMap.containsKey(alert)) {for (String suppressor : suppressionMap.get(alert)) {if (inputSet.contains(suppressor)) {isSuppressed = true;break;}}}if (!isSuppressed) {result.add(alert); // 未被抑制,加入结果}}// 按输入顺序输出结果System.out.println(String.join(" ", result));}
}

代码详细解析

  1. 读取抑制关系个数:使用 scanner.nextLine() 读取第一行并转换为整数 N
  2. 建立抑制关系映射
    • 使用 HashMap 存储,键为被抑制的告警,值为抑制它的告警集合。
    • 遍历 N 行,每行拆分为抑制者和被抑制者,将被抑制者作为键,抑制者添加到对应的集合。
  3. 读取原始告警列表:拆分为数组并转换为集合 inputSet 用于快速查询。
  4. 过滤被抑制的告警
    • 遍历每个告警,检查是否存在抑制它的告警在 inputSet 中。
    • 若存在,则跳过;否则加入结果列表。
  5. 输出结果:按输入顺序拼接未被抑制的告警。

示例测试

示例1
输入:

2
A B
B C
A B C D E

输出:

A D E

解析:A 抑制 B,B 抑制 C,B 和 C 被过滤,D、E 无抑制。

示例2
输入:

1
B A
B A

输出:

B

解析:B 抑制 A,A 被过滤,B 被保留。

示例3
输入:

0
A B C

输出:

A B C

解析:无抑制关系,所有告警均保留。

综合分析

  1. 时间复杂度:O(N + M*K),其中 N 为抑制关系数,M 为告警列表长度,K 为每个告警的抑制者数量。高效处理最大数据规模。
  2. 空间复杂度:O(N + M),存储抑制关系和输入集合。
  3. 正确性:通过抑制关系映射和集合查询,确保所有抑制条件被正确判断。
  4. 适用性:处理所有合法输入,包括重复告警和不同顺序的抑制关系。

python

问题分析

我们需要根据给定的告警抑制关系和原始告警列表,输出实际产生的未被抑制的告警列表。高优先级告警会抑制低优先级告警,无论它们在输入列表中的顺序如何。


解题思路

  1. 建立抑制关系映射:记录每个告警被哪些高优先级告警抑制。
  2. 快速判断抑制存在性:通过集合快速检查某个告警是否存在于输入列表中。
  3. 遍历原始告警列表:对于每个告警,检查是否存在抑制它的告警存在于输入列表中,若存在则过滤,否则保留。

代码实现

from collections import defaultdictdef main():n = int(input())  # 读取抑制关系个数suppression = defaultdict(set)  # 抑制关系映射表:被抑制的告警 → 抑制它的告警集合# 读取所有抑制关系for _ in range(n):suppressor, suppressed = 

http://www.hkcw.cn/article/FKqtixXXUj.shtml

相关文章

LabVIEW旋转机械智能监测诊断系统

采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…

学习路之PHP--easyswoole简易增删改查入门

这里写目录标题 0、安装orm插件一、创建数据库二、创建模型三、 0、安装orm插件 composer require easyswoole/orm一、创建数据库 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,title varchar(200) CHARACTER SET utf8 COLLATE utf…

C++通用日志模块

概述 在 C 项目中开发时经常需要日志模块&#xff0c;为了不引入其它第三方日志模块包的基础上&#xff0c;基于标准的 C17 的基础自己封装了一个日志模块 功能总结 日志分等级&#xff08;DEBUG / INFO / WARN / ERROR&#xff09;支持日志文件轮转&#xff0c;自动备份旧日…

Arbitrum Stylus 合约实战 :Rust 实现 ERC20

在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中&#xff0c;我们深入探讨了 Arbitrum Stylus 的核心技术架构&#xff0c;包括其 MultiVM 机制、Rust 合约开发环境搭建&#xff0c;以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…

ADQ36-2通道2.5G,4通道5G采样PXIE

ADQ36是一款高端12位四通道灵活数据采集板&#xff0c;针对高通道数科学应用进行了优化。ADQ36具有以下特性: 4 / 2模拟输入通道每通道2.5 / 5 GSPS7gb/秒的持续数据传输速率两个外部触发器通用输入/输出&#xff08;GPIO&#xff09;ADQ36数字化仪包括固件FWDAQ ADQ36简介 特…

20中数组去重的方法20种数组去重的方法

开始 本文有很多问题&#xff0c;并没有直接给出答案&#xff0c;大伙有自己思考的可以评论区留言。关于时间复杂度只是一个大体的估计。20种只能说保守了&#xff0c;20种都是单论思路而已&#xff0c;暂时没想到更多的思路&#xff0c;有其他方法的可以评论区留言。 easy模式…

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…

Emacs 折腾日记(二十六)——buffer与窗口管理

本节我们将介绍如何在Emacs中的buffer与窗口管理&#xff0c;目标是快速管理窗口&#xff0c;以及快速在不同buffer中进行切换 基本概念介绍 Emacs与vim相比的一个特点是&#xff0c;Emacs是一个窗口程序&#xff0c;或者说是一个gui程序。而vim是一个终端字符界面程序(当然E…

强化学习(十三)DQN

传统的强化学习算法会使用表格的形式存储状态价值函数 V ( s ) V(s) V(s) 或动作价值函数 Q ( s ) Q(s) Q(s) &#xff0c;但是这样的方法存在很大的局限性。例如&#xff0c;现实中的强化学习任务所面临的状态空间往往是连续的&#xff0c;存在无穷多个状态&#xff0c;在这…

RapidOCR集成PP-OCRv5_det mobile模型记录

该文章主要摘取记录RapidOCR集成PP-OCRv5_mobile_det记录&#xff0c;涉及模型转换&#xff0c;模型精度测试等步骤。原文请前往官方博客&#xff1a; https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8B…

【深度学习】13. 图神经网络GCN,Spatial Approach, Spectral Approach

图神经网络 图结构 vs 网格结构 传统的深度学习&#xff08;如 CNN 和 RNN&#xff09;在处理网格结构数据&#xff08;如图像、语音、文本&#xff09;时表现良好&#xff0c;因为这些数据具有固定的空间结构。然而&#xff0c;真实世界中的很多数据并不遵循网格结构&#x…

从“无差别降噪”到“精准语音保留”:非因果优化技术为助听设备和耳机降噪注入新活力

在复杂环境中保持清晰语音感知一直是助听设备与消费级耳机的核心挑战。传统主动降噪&#xff08;ANC&#xff09;技术虽能抑制环境噪声&#xff0c;但会无差别削弱所有声音&#xff0c;导致用户难以听清目标方向的语音&#xff08;如对话者&#xff09;。近年来&#xff0c;开放…

家庭路由器改装,搭建openwrt旁路由以及手机存储服务器,实现外网节点转发、内网穿透、远程存储、接入满血DeepSeek方案

大家好&#xff0c;也是好久没有发文了&#xff0c;最近在捣鼓一些比较有趣的东西&#xff0c;打算跟大家分享一下&#xff01; 先聊一下我的大致方案嘛&#xff0c;最近感觉家里路由器平时一直就只有无线广播供网的功能&#xff0c;感觉这么好的一下嵌入式设备产品不应该就干这…

【Linux】shell脚本的变量与运算

目录 一.变量 1.1什么是变量 1.2变量的命名 1.3变量的调用 1.4字符的转义 1.5变量的取消 二.变量的类型 2.1函数级变量 2.2环境级变量 2.3用户级变量 2.4系统级变量 2.5常见的系统变量 三..特殊变量及定义 3.1用命令的执行结果定义变量 3.2传参变量 3.3交互式传…

Linux进程概念

一.冯诺依曼体系结构 冯诺依曼体系结构是当代计算机的基本结构&#xff0c;它主要包括几个板块&#xff0c;输入设备&#xff0c;输出设备&#xff0c;存储器&#xff0c;运算器和控制器。 下面是简略版的图解析&#xff1a; 输入设备主要包含鼠标&#xff0c;键盘&#xff0…

[9-2] USART串口外设 江协科技学习笔记(9个知识点)

1 2 3 智能卡、IrDA和LIN是三种不同的通信技术&#xff0c;它们在电子和汽车领域中有着广泛的应用&#xff1a; • 智能卡&#xff08;Smart Card&#xff09;&#xff1a; • 是什么&#xff1a;智能卡是一种带有嵌入式微处理器和存储器的塑料卡片&#xff0c;可以存储和处理数…

低代码——表单生成器以form-generator为例

主要执行流程说明&#xff1a; 初始化阶段 &#xff1a; 接收表单配置对象formConf深拷贝配置&#xff0c;初始化表单数据和验证规则处理每个表单组件的默认值和特殊配置&#xff08;如文件上传&#xff09; 渲染阶段 &#xff1a; 通过render函数创建el-form根组件递归渲染表…

奥威BI+AI——高效智能数据分析工具,引领数据分析新时代

随着数据量的激增&#xff0c;企业对高效、智能的数据分析工具——奥威BIAI的需求日益迫切。奥威BIAI&#xff0c;作为一款颠覆性的数据分析工具&#xff0c;凭借其独特功能&#xff0c;正在引领数据分析领域的新纪元。 一、‌零报表环境下的极致体验‌ 奥威BIAI突破传统报表限…

grid网格布局

使用flex布局的痛点 如果使用justify-content: space-between;让子元素两端对齐&#xff0c;自动分配中间间距&#xff0c;假设一行4个&#xff0c;如果每一行都是4的倍数那没任何问题&#xff0c;但如果最后一行是2、3个的时候就会出现下面的状况&#xff1a; /* flex布局 两…

基于 GitLab CI + Inno Setup 实现 Windows 程序自动化打包发布方案

在 Windows 桌面应用开发中&#xff0c;实现自动化构建与打包发布是一项非常实用的工程实践。本文以我在开发PackTes项目时的为例&#xff0c;介绍如何通过 GitLab CI 配合 Inno Setup、批处理脚本、Qt 构建工具&#xff0c;实现版本化打包并发布到共享目录的完整流程。 项目地…