华为OD机试真题 Java 实现【告警抑制】【2023 B卷 100分】,附详细解题思路-LMLPHP

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 Java 实现【告警抑制】【2023 B卷 100分】,附详细解题思路-LMLPHP

一、题目描述

告警抑制,是指高优先级告警抑制低优先级告警的规则。

高优先级告警产生后,低优先级告警不再产生。

请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。

不会出现循环抑制的情况。

告警不会传递,比如A -> B -> C,这种情况下A不会直接抑制C。

但被抑制的告警仍然可以抑制其它低优先级告警。

二、输入描述

第一行为数字N,表示告警抑制关系个数,0 <= N <= 120

接下来的N行,每行是由空格分割的两个告警ID,例如:id1 id2,表示id1抑制id2,

告警ID的格式为:

大写字母+0个或者1个数字

最后一行为告警产生列表,列表长度1~100。

三、输出描述

真实产生的告警列表。

四、解题思路

  1. 输入告警抑制关系个数N;
  2. 接下来的N行,每行是由空格分割的两个告警ID;
  3. 接下来的N行,每行是由空格分割的两个告警ID,加入告警之间的关系Map;
    • key:被抑制的报警;
    • value:可以抑制key的报警集合;
  4. 最后一行为告警产生列表;
  5. 遍历告警列表,如果没被抑制,则加入到告警列表;
  6. 输出真实产生的告警列表;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 告警抑制关系个数
    int N = Integer.parseInt(sc.nextLine());

    /**
     * 告警之间的关系
     * key:被抑制的报警
     * value:可以抑制key的报警集合
     */
    Map<String, HashSet<String>> map = new HashMap<>();
    // 接下来的N行,每行是由空格分割的两个告警ID
    for (int i = 0; i < N; i++) {
        String[] arr = sc.nextLine().split(" ");
        map.putIfAbsent(arr[1], new HashSet<>());
        HashSet<String> set = map.get(arr[1]);
        set.add(arr[0]);
    }

    // 最后一行为告警产生列表
    String[] warnArr = sc.nextLine().split(" ");
    HashSet<String> set = new HashSet<>(Arrays.asList(warnArr));

    // 告警列表
    StringBuilder builder = new StringBuilder();
    for (String warn : warnArr) {
        // 如果没被抑制,则加入到告警列表
        if (!map.containsKey(warn) || Collections.disjoint(map.get(warn), set)) {
            builder.append(warn).append(" ");
        }
    }
    String result = builder.toString();
    System.out.println(result.substring(0, result.length()-1));
}

六、效果展示

1、输入

3
A C
B D
A B
A B C D E

2、输出

A E

3、说明

A抑制了C;
B抑制了D;
A抑制了B;

最终的实际报警为A E。

华为OD机试真题 Java 实现【告警抑制】【2023 B卷 100分】,附详细解题思路-LMLPHP


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 Java 实现【告警抑制】【2023 B卷 100分】,附详细解题思路-LMLPHP

07-26 05:47