华为OD机试 - 服务失效判断 - 逻辑分析(Java 2023 B卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

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

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

一、题目描述

某系统中有众多服务,每个服务用字符串(只包含字母和数字,长度<=10)唯一标识,服务间可能有依赖关系,如A依赖B,则当B故障时导致A也故障。依赖具有传递性,如A依赖B,B依赖C,当C故障时导致B故障,也导致A故障。给出所有依赖关系,以及当前已知故障服务,要求输出所有正常服务。

依赖关系:服务1-服务2表示“服务1”依赖“服务2”

不必考虑输入异常,用例保证:依赖关系列表、故障列表非空,且依赖关系数,故障服务数都不会超过3000服务标识格式正常。

二、输入描述

半角逗号分隔的依赖关系列表(换行)。

半角逗号分隔的故障服务列表。

三、输出描述

依赖关系列表中提及的所有服务中可以正常工作的服务列表,用半角逗号分隔,按依赖

关系列表中出现的次序排序。

特别的,没有正常节点输出单独一个半角逗号。

例如:

1、输入

a1-a2,a5-a6,a2-a3
a5,a2

2、输出

a6,a3

3、说明

  • 所有服务+最先出现的序号:{a1=0, a2=1, a3=5, a5=2, a6=3}
  • 故障的服务:[a1, a2, a5]
  • 正常的服务+最先出现的序号:{a3=5, a6=3}
  • 输出a6,a3

四、解题思路

  1. 输入依赖关系列表;
  2. 输入故障服务列表;
  3. 定义dependenceMap,存储依赖关系,key:故障服务,value:被关联的服务;
  4. 定义serviceMap,存储所有服务,key:服务,value:服务出现的次序;
  5. 定义badSet,存储所有故障服务;
  6. 通过while语句,获取所有故障服务;
  7. 遍历badSet,从所有服务中移除故障服务;
  8. 如果没有正常节点,输出单独一个半角逗号;
  9. 按依赖关系列表中出现的次序排序,输出正常的点。

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] arr = sc.nextLine().split(",");// 故障服务列表String[] badArr = sc.nextLine().split(",");// key:故障服务,value:被关联的服务Map<String, String> dependenceMap = new HashMap<>();// 所有服务 key:服务,value:服务出现的次序Map<String, Integer> serviceMap = new HashMap<>();int idx = 0;for (String service : arr) {String[] temp = service.split("-");dependenceMap.put(temp[1], temp[0]);serviceMap.putIfAbsent(temp[0], idx++);serviceMap.putIfAbsent(temp[1], idx++);}Set<String> badSet = new HashSet<>();for (int i = 0; i < badArr.length; i++) {String bad = badArr[i];badSet.add(bad);// 获取所有故障服务while (dependenceMap.containsKey(bad)) {bad = dependenceMap.get(bad);badSet.add(bad);}}System.out.println("所有服务+最先出现的序号:" + serviceMap);System.out.println("故障的服务:" + badSet);// 正常的服务 = 所有服务 - 故障的服务badSet.forEach(x -> serviceMap.remove(x));System.out.println("正常的服务+最先出现的序号:" + serviceMap);// 没有正常节点输出单独一个半角逗号if(serviceMap.size()==0){System.out.println(",");return;}// 按依赖关系列表中出现的次序排序输出正常的点StringJoiner stringJoiner = new StringJoiner(",");new ArrayList<>(serviceMap.entrySet()).stream().sorted(Comparator.comparingInt(Map.Entry::getValue)).forEach(x -> stringJoiner.add(x.getKey()));System.out.println(stringJoiner);
}

六、效果展示

1、输入

a10-a1,a5-a6,a2-a3,a6-a1,a4-a3,a3-a5
a5,a2

2、输出

a10,a1,a6

3、说明

  • 所有服务+最先出现的序号:{a1=1, a10=0, a2=4, a3=5, a4=8, a5=2, a6=3}
  • 故障的服务:[a2, a3, a4, a5]
  • 正常的服务+最先出现的序号:{a1=1, a10=0, a6=3}
  • 按序号输出正常的服务a10,a1,a6

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/161356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++指针笔记

一.定义 是什么&#xff1f; 指针就是地址&#xff0c;相当于门牌号。通过 0x0000也可以拿到该地址里的数据&#xff0c; 可是如果每创建一个变量都要去记住地址编号不太方便我们使用数据&#xff0c;所以才有变量。作用&#xff1f; 通过指针(地址)间接访问内存。内存的编号…

CVE-2023-21839 weblogic rce漏洞复现

文章目录 一、漏洞影响版本二、漏洞验证三、启动反弹shell监听切换路径到jdk1.8 四、启动ldap服务五、使用CVE-2023-21839工具来进行攻击测试六、反弹shell 一、漏洞影响版本 CVE-2023-21839是Weblogic产品中的远程代码执行漏洞&#xff0c;由于Weblogic IIOP/T3协议存在缺陷&…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive cd thirdparty/insta…

【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)

Comparing Code Explanations Created by Students and Large Language Models 写在最前面总结思考 背景介绍编程教育—代码理解和解释技能培养编程教育—解决方案研究问题研究结果 相关工作Code ComprehensionPedagogical Benifis of code explanationLarge Language Models i…

vue3+element Plus实现弹框的拖拽、可点击底层页面功能

1、template部分 <el-dialog:modal"false"v-model"dialogVisible"title""width"30%"draggable:close-on-click-modal"false"class"message-dialog"> </el-dialog> 必须加的属性 modal:是否去掉遮罩层…

【Java 进阶篇】Java Session 原理及快速入门

大家好&#xff0c;欢迎来到本篇博客。今天&#xff0c;我们将探讨Java Web开发中一个重要而令人兴奋的概念&#xff0c;即Session&#xff08;会话&#xff09;。Session是一种在Web应用程序中跟踪用户状态和数据的机制。我们将深入了解Session的原理&#xff0c;并通过示例来…

第六讲:VBA与ACCESS的ADO连接中,所涉及的对象

《VBA数据库解决方案》教程&#xff08;10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实…

FreeRTOS笔记【一】 任务的创建(动态方法和静态方法)

一、任务创建和删除API函数 函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCreateRestricted()创建一个使用MPU进行限制的任务&#xff0c;相关内存使用动态内存分配vTaskDelete()删除一个任务 二、动态创建任务 2.1 …

卷积与反卷积

文章目录 1 卷积1.1 卷积后的输出维度 2 反卷积2.1 来源2.2 原理2.3 使用2.3.1 padding2.3.2 strideoutput_padding 2.3 意义 1 卷积 1.1 卷积后的输出维度 设输入维度为i x i&#xff0c;卷积核大小为k x k&#xff0c;padding为p&#xff0c;strides为s&#xff0c;则输出维…

项目实战:新增@RequestMapping和@GetMapping和@PostMapping三个注解

1、RequestMapping package com.csdn.mymvc.annotation; import java.lang.annotation.*; Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Inherited public interface RequestMapping {String value(); }2、PostMapping package com.csdn.mymvc.annotation; im…

NLP 模型中的偏差和公平性检测

一、说明 近年来&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 模型广受欢迎&#xff0c;彻底改变了我们与文本数据交互和分析的方式。这些基于深度学习技术的模型在广泛的应用中表现出了卓越的能力&#xff0c;从聊天机器人和语言翻译到情感分析和文本生成。然而&…

JVM虚拟机:垃圾回收器组合参数设定

本文重点 前面的课程中我们介绍了目前JVM中主流的垃圾回收器&#xff0c;不同的回收器会有不同的组合&#xff0c;其中1.8版本的jdk中&#xff0c;默认使用的是Parallel ScavengeParallel Old&#xff0c;也就是说新生代使用Parallel Scavenge&#xff0c;然后老年代使用Paral…