目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 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();
// 流水线个数 m
int m = line[0];
// 作业数 n
int 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在线答疑。