题目描述:
为了充分发挥 GPU 算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增 假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成
输入描述:
第一个参数为GPU一次最多执行的任务个数,取值范围[1, 10000]
第二个参数为任务 数组长度 ,取值范围[1, 10000]
第三个参数为任务数组,数字范围[1, 10000]
输出描述:
执行完所有任务最少需要多少秒 补充说明:
示例1
输入:
3 5 1 2 3 4 5
输出:
6
说明:
一次最多执行3个任务,最少耗时6s
示例2
输入:
4 5 5 4 1 1 1
输出:
5
说明:
一次最多执行4个任务,最少耗时5s
代码
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();//GPU最多执行个数
int m = in.nextInt();//任务数组长度
int[] arr = new int[m];//任务数组
for(int arr_i = 0; arr_i < m; arr_i++){
arr[arr_i] = in.nextInt();
}
System.out.println(f(n, arr));
}
//计算执行时间
public static int f(int n, int[] arr) {
int time=0;//时间
int sm=0;//一个时间范围的任务数
for(int i:arr){
sm+=i;
//任务数大于最多执行个数,则执行n个任务,剩余sm-n
//任务数小于最多执行个数,则执行sm个任务,剩余0
if(sm>n){
time++;
sm=sm-n;
}else{
time++;
sm=0;
}
}
//最后判断是否有剩余任务,如果有计算任务执行时间
if(sm>0){
if(sm%n==0)
time+=sm/n;
else{
time+=sm/n+1;
}
}
return time;
}
}