目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 1、输入
- 2、输出
- 3、说明
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
一个工厂有 m 条流水线,来并行完成 n 个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。现给定流水线个数 m,需要完成的作业数 n,每个作业的处理时间分别为 t1.t2…tn。请你
编程计算处理完所有作业的耗时为多少?
当 n>m 时,首先处理时间短的 m 个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。
二、输入描述
第一行为2 个整数 (采用空格分隔),分别表示流水线个数 m 和作业数 n;
第二行输入 n个整数 (采用空格分隔) ,表示每个作业的处理时长 t1,t2…tn。
0< m,n<100,0<t1,t2…tn<100.
注:保证输入都是合法的
三、输出描述
输出处理完所有作业的总时长。
1、输入
3 5
8 4 3 2 10
2、输出
13
3、说明
- 先安排时间为2、3、4的三个作业;
- 第一条流水线先完成作业,然后调度剩余时间最短的作业8;
- 第二条流水线完成作业,然后调度剩余时间最短的作业10;
- 总耗时就是第二条流水线完成作业的时间
四、解题思路
- 将每个作业的处理时长有小到大排序;
- 每条流水线依次处理时长小的作业,其它的作业等待;
- 当第一条作业完成后,再完成剩余的作业中处理时间最小的作业;
- 依次类推;
- 总耗时就是最后一个作业所对应的流水线的总耗时。
五、Java算法源码
package com.guor.od;import java.util.*;public class OdTest01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] line = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 流水线个数 mint m = line[0];// 作业数 nint n = line[1];// 每个作业的处理时长int[] timeArr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 有小到大排序Arrays.sort(timeArr);/*** 特殊情况:* 流水线 大于等于 独立的作业时,可以直接处理,不需要等待排队* 直接返回独立作业最长的处理时间即可*/if (m >= n) {System.out.println(timeArr[timeArr.length - 1]);return;}// 当 n>m 时,首先处理时间短的 m 个作业进入流水线,其他的等待Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < timeArr.length; i++) {// m条流水线同时处理作业int key = i % m;map.put(key, map.getOrDefault(key, 0) + timeArr[i]);}// 处理完所有作业的总时长int sum = 0;for (Integer value : map.values()) {sum = Math.max(sum, value);}// 输出处理完所有作业的总时长System.out.println(sum);}
}
六、效果展示
1、输入
4 6
10 20 15 12 8 9
2、输出
29
3、说明
- 10 20 15 12 8 9从小到大排序,8 9 10 12 15 20
- 一共4条流水线,先完成8 9 10 12;
- 第一条流水线先完成作业,然后调度剩余时间最短的作业15;
- 第二条流水线完成作业,然后调度剩余时间最短的作业20;
- 总耗时就是第二条流水线完成作业的时间29。
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。