621. El programador de tareas
CPU a la lista de tareas a realizar por una representación de matriz de caracteres dada. Que comprende el uso de mayúsculas A - 26 tipos diferentes de tareas letras Z. Tarea puede llevarse a cabo en cualquier orden, y cada tarea puede ser ejecutado todo dentro de una unidad de tiempo. CPU puede realizar una tarea en cualquier unidad de tiempo, o en modo de espera.
Sin embargo, debe tener el mismo tipo entre las dos tareas de refrigeración longitud de tiempo n, de modo que al menos n unidades consecutivas de tiempo dentro de la CPU para realizar diferentes tareas, o el estado de espera.
Es necesario para calcular el menor tiempo para completar todas las tareas requeridas.
Ejemplo:
De entrada: tareas = [ "A", "A", "A", "B", "B", "B"], n = 2
de salida: 8
explican: A -> B -> (standby) -> A -> B -> (en espera) -> A -> B.
consejos:
El número total de tarea es [1, 10000].
n está en el intervalo [0, 100].
class Solution {
public int leastInterval(char[] tasks, int n) {
int[] count = new int[26];
for (int i = 0; i < tasks.length; i++) {
count[tasks[i]-'A']++;
}//统计词频
Arrays.sort(count);//词频排序,升序排序,count[25]是频率最高的
int maxCount = 0;
//统计有多少个频率最高的字母
for (int i = 25; i >= 0; i--) {
if(count[i] != count[25]){
break;
}
maxCount++;
}
//n小于种类的时候,会比长度小
//公式算出的值可能会比数组的长度小,取两者中最大的那个
return Math.max((count[25] - 1) * (n + 1) + maxCount , tasks.length);
}
}