一、题目描述
公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你帮他们解决一个任务混部问题:
有taskNum项任务,每个任务有开始时间(startTime ),结束时间(endTime),并行度(parallelism)三个属性,并行度是指这个任务运行时将会占用的服务器数量,一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用,任务运行完会立即释放(结束时刻不占用)。
任务混部问题是指给定一批任务,让这批任务由同一批服务器承载运行,请你计算完成这批任务混部最少需要多少服务器,从而最大化控制资源成本。
二、输入描述
第一行输入为taskNum,表示有taskNum项任务
接下来taskNum行,每行三个整数,表示每个任务的开始时间(startTime ),结束时间(endTime),并行度(parallelism)。
三、输出描述
一个整数,表示最少需要的服务器数量。
四、补充说明
1<=taskNum<=100000
0<=startTime<endTime<=50000
1=<parallelism<=100
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// n个任务
int n = sc.nextInt();
int[] nums = new int[50000];
for (int i = 0; i < n; i++) {
// 每个任务的开始时间
int startTime = sc.nextInt();
// 结束时间
int endTime = sc.nextInt();
// 并行度
int count = sc.nextInt();
for (int j = startTime; j < endTime; j++) {
nums[j] += count;
}
}
Arrays.sort(nums);
System.out.println(nums[49999]);
}
五、效果展示
1、输入
3
2 3 1
6 9 2
0 5 1
2、输出
2
3、说明
一共有三个任务,第一个任务在时间区间[2,3)运行,占用1个服务器,第二个任务在时间区间[6,9)运行,占用2个服务器,第三个任务在时间区间[0,5)运行,占用1个服务器,需要最多服务器的时间区间为[2,3)和[6,9),需要2个服务器。
🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。