20天拿下华为OD笔试之【BFS】2023Q1A-微服务的集成测试【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解

2023-11-20

【BFS】2023Q1A-微服务的集成测试

题目描述与示例

题目描述

现在有 n 个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次服务自身启动加载会消耗一些时间。

给你一个 nxn 的二维矩阵 useTime,其中 useTime[i][i] = 10 表示服务 i 自身启动加载需要消耗 10s,useTime[i][j] = 1 表示服务 i 启动依赖服务 j 启动完成,useTime[i][k] = 0,表示服务 i 启动不依赖服务 k。存在0 <= i,j,k < n

服务之间启动没有循环依赖(不会出现环),若想对任意一个服务 i 进行集成测试(服务 i 自身也需要加载),求最少需要等待多少时间。

输入描述

第一行输入服务总量 n,之后的 n 行表示服务启动的依赖关系以及自身启动加载耗时 最后输入 k 表示计算需要等待多少时间后可以对服务 k 进行集成测试 其中 1 <= k <= n1<=n<=100

输出描述

最少需要等待多少时间(s)后可以对服务 k 进行集成测试

示例一

输入

3
5 0 0
1 5 0
0 1 5
3

输出

15

说明

服务3 启动依赖服务2,服务 2 启动依赖服务 1,由于服务 1,2,3 自身加载需要消耗 5s,所以 5+5+5=15,需等待 15s 后可以对服务 3 进行集成测试

示例二

输入

3
5 0 0
1 10 1
1 0 11
2

输出

26

说明

服务 2 启动依赖服务 1 和服务 3,服务 3 启动需要依赖服务 1,服务 1,2,3 自身加载需要消耗 5s,10s,11s,所以 5+10+11=26,需等待 26s 后可以对服务 2 进行集成测试

示例三

输入

4
2 0 0 0
0 3 0 0
1 1 4 0
1 1 1 5
4

输出

12

说明

服务 3 启动依赖服务 1 和服务 2,服务 4 启动需要依赖服务 1,2,3,服务 1,2,3,4 自身加载需要消耗 2s,3s,4s,5s,所以 3+4+5=12s(因为服务 1 和服务 2 可以同时启动),需等待 12s 后可以对服务 4 进行集成测试

示例四

输入

5
1 0 0 0 0
0 2 0 0 0
1 1 3 0 0
1 1 0 4 0
0 0 1 1 5
5

输出

11

说明

服务 3 启动依赖服务 1 和服务 2,服务 4 启动需要依赖服务 1,2,服务 5 启动需要依赖服务 3,4,服务 1,2,3,4,5 自身加载需要消耗 1s,2s,3s,4s,5s,所以 2+4+5=11s(因为服务 1 和服务 2 可以同时启动,服务 3 和服务 4 可以同时启动),需等待 11s 后可以对服务 5 进行集成测试

解题思路

本题在常规的拓扑排序问题上加多了启动时间这一个限制条件,属于变形题。

代码

# 题目:2023Q1A-微服务的集成测试
# 分值:200
# 作者:许老师-闭着眼睛学数理化
# 算法:拓扑排序BFS
# 代码看不懂的地方,请直接在群上提问

from collections import deque, defaultdict

# 输入节点数n
n = int(input())
# 输入关联矩阵
isConnected = list()
for _ in range(n):
    isConnected.append(list(map(int, input().split())))

# 输入最后要查询的节点k,题目的索引是从1开始的,而我们储存数据的索引是从0开始的
# 故此处应该进行一个-1操作。譬如,服务4实际上是代码中的节点3。
k = int(input())-1

# 初始化入度数组,长度为n
inDegreeList = [0] * n

# 将关联矩阵isConnected转为熟悉的、方便操作的邻接表neighbor_table
neighbor_table = defaultdict(list)
for i in range(n):
    for j in range(n):
        # i依赖于j,要先运行了j才能运行i。注意此处i不能等于j
        if isConnected[i][j] == 1 and i != j:
            # 记录j的下一个邻接点包含i
            neighbor_table[j].append(i)
            # 同时i的入度+1
            inDegreeList[i] += 1


# 构建数组loadTimeList,储存每一个节点加载自身所需要的时间
loadTimeList = [isConnected[i][i] for i in range(n)]

# 初始化队列,用于维护BFS过程,起始搜索点为入度为0的节点
q = deque([i for i in range(n) if inDegreeList[i] == 0])

# 构建长度为n的时间数组totalTime,totalTime[i]表示第i个节点启动需要花费的总时间
totalTime = [0] * n

# 进行BFS
while len(q) > 0:
    # 弹出当前队头节点cur,说明cur是可以启动的
    cur = q.popleft()
    # cur节点启动的总时间,要加上其加载自身所需要的时间loadTimeList[cur]
    totalTime[cur] += loadTimeList[cur]
    # 如果发现弹出的节点cur就是所需要寻找的节点k,可以直接退出BFS循环,完成搜索
    # 注意这个判断条件可以不加
    if cur == k:
        break
    # 遍历所有cur的下一个运行节点nxt
    for nxt in neighbor_table[cur]:
        # nxt的入度减少1
        inDegreeList[nxt] -= 1
        # nxt的启动总时间,在未考虑nxt自身加载时间时,依赖于所有前置节点的启动时间,
        # 若出现前置节点totalTime[cur]启动总时间 > nxt启动总时间totalTime[nxt]
        # 则totalTime[nxt]需要以前置节点启动总时间为准
        totalTime[nxt] = max(totalTime[nxt], totalTime[cur])
        # 如果nxt的入度降为0,则可以加入队列中
        if inDegreeList[nxt] == 0:
            q.append(nxt)

# 输出totalTime[k]即为答案
print(totalTime[k])

时空复杂度

时间复杂度:O(N^2)。需要遍历整个isConnected关联矩阵。

空间复杂度:O(N^2)。邻接表neighbor_table所占空间最大为O(N^2),其他变量所占空间最大为O(N)

,故总的空间复杂度为O(N^2)

华为OD算法冲刺训练

  • 华为OD算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 30+天陪伴式学习,20+直播课时,300+动画图解视频,200+LeetCode经典题,100+华为OD真题,还有简历修改与模拟面试将为你解锁

  • 可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 sheepvipvip了解更多

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

20天拿下华为OD笔试之【BFS】2023Q1A-微服务的集成测试【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解 的相关文章

  • RC-u4 相对论大师(bfs求解指定路径)

    PTA 程序设计类实验辅助教学平台 题解 bfs可以求解从根节点到叶子节点的指定路径 这里的vis 不是为了防止访问到父节点 更多的是为了缩小路径长度 mpp和mp的映射也很巧妙 开始我用的还是map
  • 华为OD机试真题-最大坐标值-2023年OD统一考试(C卷)

    题目描述 小明在玩一个游戏 游戏规则如下 在游戏开始前 小明站在坐标轴原点处 坐标值为0 给定一组指令和一个幸运数 每个指令都是一个整数 小明按照指定的要求前进或者后退指定的步数 前进代表朝坐标轴的正方向走 后退代表朝坐标轴的负方向走 幸运
  • 集成测试和系统测试的区别是什么?

    前面的文章聊过测试过程效率提升和演变 也分享了我对于单元测试的一些实践和思考 这篇文章接着上篇单元测试的内容 聊聊集成测试的特点 要解决什么问题 以及实践的注意事项 下图是 从需求出现到最后的线上发布 大致要经历的几个阶段 狭义上的测试活动
  • 华为OD机试真题-电脑病毒感染-2023年OD统一考试(C卷)

    题目描述 一个局域网内有很多台电脑 分别标注为0 N 1的数字 相连接的电脑距离不一样 所以感染时间不一样 感染时间用t表示 其中网络内一个电脑被病毒感染 其感染网络内所有的电脑需要最少需要多长时间 如果最后有电脑不会感染 则返回 1 给定
  • 华为OD机试真题-火星文计算-2023年OD统一考试(C卷)

    题目描述 已知火星人使用的运算符为 其与地球人的等价公式如下 x y 4 x 3 y 2 x y 2 x y 3 1 其中x y是无符号整数 2 地球人公式按C语言规则计算 3 火星人公式中 的优先级高于 相同的运算符 按从左到右的顺序计算
  • 华为OD机试真题-符号运算-2023年OD统一考试(C卷)

    题目描述 给定一个表达式 求其分数计算结果 表达式的限制如下 1 所有的输入数字皆为正整数 包括0 2 仅支持四则运算 和括号 3 结果为整数或分数 分数必须化为最简格式 比如6 3 4 7 8 90 7 4 除数可能为0 如果遇到这种情况
  • 华为OD机试真题-精准核酸检测-2023年OD统一考试(C卷)

    题目描述 为了达到新冠疫情精准防控的需要 为了避免全员核酸检测带来的浪费 需要精准圈定可能被感染的人群 现在根据传染病流调以及大数据分析 得到了每个人之间在时间 空间上是否存在轨迹的交叉 现在给定一组确诊人员编号 X1 X2 X3 Xn 在
  • 华为OD机试真题-测试用例执行计划-2023年OD统一考试(C卷)

    题目描述 某个产品当前迭代周期内有N个特性 F1 F2 FN 需要进行覆盖测试 每个特性都被评估了对应的优先级 特性使用其ID作为下标进行标识 设计了M个测试用例 T1 T2 TM 每个用例对应了一个覆盖特性的集合 测试用例使用其ID作为下
  • 华为OD机试真题-5G网络建设-2023年OD统一考试(C卷)

    题目描述 现需要在某城市进行5G网络建设 已经选取N个地点设置5G基站 编号固定为1到N 接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通 不同基站之间架设光纤的成本各不相同 且有些节点之间已经存在光纤相连 请你设计算法 计算出能
  • 华为OD机试真题-攀登者1-2023年OD统一考试(C卷)

    题目描述 攀登者喜欢寻找各种地图 并且尝试攀登到最高的山峰 地图表示为一维数组 数组的索引代表水平位置 数组的高度代表相对海拔高度 其中数组元素0代表地面 例如 0 1 2 4 3 1 0 0 1 2 3 1 2 1 0 代表如下图所示的地
  • 华为OD机试真题-密码解密-2023年OD统一考试(C卷)

    题目描述 给定一段 密文 字符串s 其中字符都是经过 密码本 映射的 现需要将 密文 解密并且输出 映射的规则 a i 分别用 1 9 表示 j z 分别用 10 26 表示 约束 映射始终唯一 输入描述 密文 字符串 输出描述 明文字符串
  • 华为OD机试真题-英文输入法-2023年OD统一考试(C卷)

    题目描述 主管期望你来实现英文输入法单词联想功能 需求如下 依据用户输入的单词前缀 从已输入的英文语句中联想出用户想输入的单词 按字典序输出联想到的单词序列 如果联想不到 请输出用户输入的单词前缀 注意 1 英文单词联想时 区分大小写 2
  • 华为OD机试真题-查找一个有向网络的头节点和尾节点-2023年OD统一考试(C卷)

    题目描述 给定一个有向图 图中可能包含有环 图使用二维矩阵表示 每一行的第一列表示起始节点 第二列表示终止节点 如 0 1 表示从0到1的路径 每个节点用正整数表示 求这个数据的首节点与尾节点 题目给的用例会是一个首节点 但可能存在多个尾节
  • 华为OD机试真题-计算三叉搜索树的高度-2023年OD统一考试(C卷)

    题目描述 定义构造三叉搜索树规则如下 每个节点都存有一个数 当插入一个新的数时 从根节点向下寻找 直到找到一个合适的空节点插入 查找的规则是 1 如果数小于节点的数减去500 则将数插入节点的左子树 2 如果数大于节点的数加上500 则将数
  • 华为OD机试真题-分割均衡字符串-2023年OD统一考试(C卷)

    题目描述 均衡串定义 字符串只包含两种字符 且两种字符的个数相同 给定一个均衡字符串 请给出可分割成新的均衡子串的最大个数 约定字符串中只包含大写的 X 和 Y 两种字符 输入描述 均衡串 XXYYXY 字符串的长度 2 10000 给定的
  • 2024年华为OD机试真题-转盘寿司-Java-OD统一考试(C卷)

    题目描述 寿司店周年庆 正在举办优惠活动回馈新老客户 寿司转盘上总共有n盘寿司 prices i 是第i盘寿司的价格 如果客户选择了第i盘寿司 寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司 j 前提是prices j lt prices
  • 华为OD机试真题-堆内存申请-2023年OD统一考试(C卷)

    题目描述 有一个总空间为100字节的堆 现要从中新申请一块内存 内存分配原则为优先紧接着前一块已使用内存分配空间足够且最接近申请大小的空闲内存 输入描述 输入 第1行是1个整数 表示期望申请的内存字节数 第2到N行是用空格分割的两个整数 表
  • 华为OD机试真题-分配土地-Python-OD统一考试(C卷)

    题目描述 从前有个村庄 村民们喜欢在各种田地上插上小旗子 旗子上标识了各种不同的数字 某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民 请问 此次分配土地 做出贡献的村民中最大会分配多大面积 输入描述 第一行
  • 华为OD统一考试 Python【数字转化】

    描述 我们想要一种特殊的整数编码方式 让数字小的时候 编码占的空间也小 编码的方法如下 我们每7位组成一部分来编码 在每个字节里 用前7位来存数字 如果后面还有数据 最高的那一位就是1 否则就是0 数据要按小端序保存 也就是说 小的数据部分
  • 华为OD机试2024年最新题库(Java)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 2024年1月 5月 考的都是OD统一考试 C卷 题库已经整理好了 命中率95 以上 这个专栏使用 Java 解法 问

随机推荐

  • 静态时序分析的三种分析模式(简述)

    经过跟行业前辈的探讨和参考一些书籍 本文中的 个人理解 部分有误 即 个人理解 在一个库中 尽管电路器件单元已经被综合映射 但是工具可以通过改变周围的环境来得到不同的单元延时 所以即使是同一个库 调用工艺参数不一样的情况下 其单元延时是不同
  • 黑客零基础入门方法有哪些?如何自学黑客技术?

    大家经常问我一个问题 黑客零基础入门方法有哪些 以及如何自学黑客技术 首先要说的是世界上大部分的网络黑客都是自学成才的 这与黑客这门技术有很大的原因 黑客是一个靠兴趣驱动的技术 大部分成为黑客的人一开始都是被黑客的酷炫身份所吸引从而成为黑客
  • PyTorch中nn.Module类简介

    torch nn Module类是所有神经网络模块 modules 的基类 它的实现在torch nn modules module py中 你的模型也应该继承这个类 主要重载 init forward和extra repr函数 Modul
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • 9.用python写网络爬虫,完结

    前言 这是python网络爬虫的最后一篇给大家做个总结 且看且珍惜把 截止到目前 前几章本书介绍的爬虫技术都应用于一个定制网站 这样可以帮助我们更加专注于学习特定技巧 而在本章中 我们将分析几个真实网站 来看看这些技巧是如何应用的 首先我们
  • 使用Gradle命令查看项目中库的依赖关系

    在Terminal中 可以通过 gradle 的命令查看项目中所使用库的版本 并且可以更加直观看到库之间的依赖关系 同时它们可以帮助您跟踪并解决与库版本冲突有关的任何问题 Building Android apps dependencies
  • P1719 Let‘s play a game!

    include
  • 海外SD-WAN服务商助力企业快速发展

    随着全球化的推进 越来越多的企业开始涉足海外市场 面临着跨国网络建设的挑战 在这个过程中 SD WAN Software Defined Wide Area Network 技术得到了广泛应用 SD WAN通过软件定义网络和云技术 可以实现
  • SQL太慢如何进行优化

    1 慢SQL优化思路 慢查询日志记录慢SQL explain分析SQL的执行计划 profile 分析执行耗时 Optimizer Trace分析详情 确定问题并采用相应的措施 1 1 慢查询日志记录慢SQL 如何定位慢SQL呢 我们可以通
  • 大数据工具软件安装失败问题是怎么解决的

    大数据所要安装的软件 python 可以在python的官网下载最新的python程序 pycharm 很好用的一款python编译工具 Anaconda3 集成了很多的大数据工具在里边 出现的问题 不能成功安装python 提示缺少win
  • python 随机生成不重复的6位数_随机生成6位数、随机生成不重复的6位数

    随机生成一个几位数 这种比较常见的操作今天我们来看一下 例如随机生成6位数 直接来简单明了的吧 int num int Math random 9 1 100000 最终num就是需要的6位随机数 同理要是想得到随机的五位数和七位数呢 随机
  • 非常详尽的 Linux 中 WEB服务器配置与管理 (通过例子来讲解)

    Apache服务器的安装与启动 检查是否已经安装了APACHE并启动它 这是已安装好的状态 root root rpm qa grep httpd httpd tools 2 2 15 53 el6 x86 64 httpd 2 2 15
  • Blender相关学习笔记

    blender m idea mm 0 1 2 5 0 4 10 0 24 6 1 环选 alt 左键 2 分离 V 3 从两个边中创建面 选择两条 或多条 边 然后按F 4 复制 shift D 复制某一个模型 或部分 到另一个图层 编辑
  • 国际软件项目经理的七大素质

    国际软件项目经理的七大素质 1 在一个或多个应用领域内使用整合了道德 法律和经济问题的工程方法来设计合适的解决方案 2 懂得确定客户需求并将其转换成软件需求的过程 3 履行项目经理的职责 善于处理技术和管理方面的事务 4 懂得并使用有用的项
  • 人脸特征点检测

    CVPR2016刚刚落下帷幕 本文对面部特征点定位的论文做一个简单总结 让大家快速了解该领域最新的研究进展 希望能给读者们带来启发 CVPR2016相关的文章大致可以分为三大类 处理大姿态问题 处理表情问题 处理遮挡问题 1 姿态鲁棒的人脸
  • 描述性能测试工作中的完整过程?

    有简单接触 采用的工具是Jmeter 进行轻量级的压力测试 1 确定好压力测试的功能模块 首先用Jmeter录制脚本 然后对脚本进行优化 2 对一些数据进行参数化 利用CSV导入存在txt文档里面的数据 3 设计测试场景 4 执行压力测试
  • 如何在windows的DOS窗口中正常显示中文(UTF-8字符)

    打开CMD exe命令行窗口 通过 chcp命令改变代码页 UTF 8的代码页为65001 ANSI OEM 简体中文 GBK为936 window default OEM 美国为437 如果chcp命令得到437 那么一定不能显示中文 此
  • 无法安装vmnet8虚拟网络适配器、vmware network editor未响应、注册失败,请检查账号数据库配置是否正确的解决

    文章目录 虚拟网络适配器安装 vmware network editor未响应 注册失败 请检查账号数据库配置是否正确的解决 关于第一次安装虚拟机的 全文约 423 字 预计阅读时长 2分钟 虚拟网络适配器安装 vmware network
  • rol/ror in c++

    template
  • 20天拿下华为OD笔试之【BFS】2023Q1A-微服务的集成测试【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解

    BFS 2023Q1A 微服务的集成测试 题目描述与示例 题目描述 现在有 n 个容器服务 服务的启动可能有一定的依赖性 有些服务启动没有依赖 其次服务自身启动加载会消耗一些时间 给你一个 nxn 的二维矩阵 useTime 其中 useT