目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
一、题目描述
现在有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 <= n,1 <= n <= 100。
三、输出描述
最少需要等待多长时间(s)后可以对服务 k 进行集成测试。
四、解题思路
- 首先,读取输入的服务总量n和依赖关系以及启动加载时间的二维矩阵useTime;
- 根据输入的服务总量n创建一个nxn的二维数组nums,并将useTime的值赋给nums;
- 读取输入的需要进行集成测试的服务k;
- 调用needTime方法,传入二维数组nums和服务k的索引值(k-1);needTime方法用于计算当前服务需要等待的最少时间;
- 在needTime方法中,首先获取当前服务自身启动加载时间selfTime,即nums[k][k];
- 遍历二维数组nums的第k行,如果存在依赖关系(nums[k][i]==1且i!=k),则递归调用needTime方法计算依赖服务i的最少等待时间time,并更新dependMaxTime为依赖服务的最大等待时间;
- 返回selfTime加上dependMaxTime,即为当前服务k进行集成测试所需的最少等待时间;
- 输出最少等待时间;
五、Python算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] nums = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
nums[i][j] = sc.nextInt();
}
}
int k = sc.nextInt();
//从第K个服务,对应到数组行数就是k-1
int time = needTime(nums, k - 1);
System.out.println(time);
}
//获取当前服务的需要等待的最少时间
public static int needTime(int[][] nums, int k) {
int n = nums[0].length;
int selfTime = nums[k][k];
int dependMaxTime = 0;
for (int i = 0; i < n; i++) {
if (nums[k][i] == 1 && i != k) {
int time = needTime(nums, i);
dependMaxTime = Math.max(dependMaxTime, time);
}
}
return selfTime + dependMaxTime;
}
六、效果展示
1、输入
3
5 0 0
1 5 0
0 1 5
3
2、输出
15
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,发现新题目,随时更新,全天CSDN在线答疑。