目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 1、大概意思就是:
- 2、比如:
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。
假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。
二、输入描述
- 第一个参数为GPU一次最多执行的任务个数,取值范围[1, 10000]
- 第二个参数为任务数组长度,取值范围[1, 10000]
- 第三个参数为任务数组,数字范围[1, 10000]
三、输出描述
执行完所有任务最少需要多少秒。
四、解题思路
题目描述很不清晰,感觉语文没学好。
反复读几遍,懂它啥意思了。
1、大概意思就是:
- GPU一次可以执行n个任务;
- 有一个任务数组,GPU每秒执行n个任务;
- 问几秒能执行完。
这不就简单了。
2、比如:
4
3
3 4 5
- GPU一次执行4个任务;
- 第1秒有3个任务,全部执行完毕;
- 第2秒有4个任务,全部执行完毕;
- 第3秒有5个任务,执行4个,还剩1个;
- 第4秒执行完毕;
故输出4。
五、Java算法源码
package com.guor.od;
import java.util.*;
public class OdTest02 {
static List<Integer> list = new ArrayList<Integer>();
// 执行完所有任务最少需要多少秒
static int times = 0;
static int n = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// GPU一次最多执行的任务个数
n = Integer.parseInt(sc.nextLine());
// 任务数组长度
int size = Integer.parseInt(sc.nextLine());
// 任务数组
for (String item : sc.nextLine().split(" ")) {
list.add(Integer.parseInt(item));
}
execute(0);
System.out.println(times);
}
/**
* 回溯,递归
* GPU执行任务
* @param remain 执行后剩余的任务数
*/
public static void execute(int remain) {
// 回溯完毕
if (list.size() == 0 && remain == 0) {
return;
}
// 如果任务数组都执行完了
if (list.size() == 0) {
// 但是,还有剩余
if (n < remain) {
remain -= n;
execute(remain);
}
// 任务数组未执行完
} else{
// 上次有剩余任务
if (remain > 0) {
// 取出第一个任务 + 上次的剩余任务 - GPU执行任务数
remain = list.get(0) + remain - n;
if (remain < 0) {
remain = 0;
}
// 任务数组未执行完,上次执行没任务剩余
} else if (remain == 0) {
// 执行本次任务,判断是否有剩余
remain = list.get(0) - n < 0 ? 0 : list.get(0) - n;
}
// 删除已经执行完的任务
list.remove(0);
execute(remain);
}
// 执行时间+1
times++;
}
}
六、效果展示
1、输入
3
4
5 4 3 2
2、输出
5
3、说明
- GPU一次执行3个任务;
- 第1秒有5个任务,执行3个,还剩2个;
- 第2秒有4个任务+上次剩余的2个,一共还有6个任务,执行3个,还剩3个;
- 第3秒有3个任务+上次剩余的3个,一共还有6个任务,执行3个,还剩3个;
- 第4秒有2个任务+上次剩余的3个,一共还有5个任务,执行3个,还剩2个;
- 第5秒执行完毕;
故输出5。
🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。