CPU调度问题
设一共x种任务,每种任务的件数不同,完成一件任务需要1时间单位,相同的两个任务之间要间隔n时间单位才能做。问最后要多久能完成所有任务
找出 件数最多的任务,设为A,要完成k次
所以至少需要的时间是(k-1)*(n+1)+1
比如n=2时候这个模式就是 A_ _ A _ _ A.......
中间可以添加其他任务,因为其他任务的数量都没有A多,所以都可以填到A后面的空格
而且!就算n太小了,空格填满了。有其他人物的时候直接填到每个模块末尾就好了!!这点想了好久,我真的弱智。
Java 对 ArrayList排序可以用Collections.sort(xxx)默认升序
数组排序用Arrays.sort(xxx) 用的是双轴快排(DualPivotQuicksort) 优于nlogn
或者Arrays.sort(int[] a, int fromIndex, int toIndex),区间排序,左闭右开
PS:Integer类型在数据超出[-128,127]时,== 比较的是变量地址,所以建议使用equals,太TM坑了
class Solution {
public int leastInterval(char[] tasks, int n) {
int []a = new int[30];
int m = tasks.length;
for(int i=0;i<m;i++){
a[tasks[i]-'A'] ++;
}
ArrayList<Integer> num = new ArrayList<Integer>();
for(int i=0;i<30;i++){
if(a[i]!=0)
num.add(a[i]);
}
Collections.sort(num);
int mm = num.size();
int same_as_max = 0;
for(int i=mm-1;i>=0;i--){
if(num.get(i).equals(num.get(mm-1)))
same_as_max++;
}
return Math.max((n+1)*(num.get(mm-1)-1)+same_as_max,m);
}
}