1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public int leastInterval(char[] tasks, int n) { int[] taskToCountArray = new int[26]; int maxTaskCount = 0; for (char c : tasks) { int taskIndex = c - 'A'; taskToCountArray[taskIndex]++; maxTaskCount = Math.max(maxTaskCount, taskToCountArray[taskIndex]); }
int parallelTasks = 0; for (int i = 0; i < 26; i++) { if (taskToCountArray[i] == maxTaskCount) { parallelTasks++; }
}
return Math.max(tasks.length, (maxTaskCount - 1) * (n + 1) + parallelTasks); } }
|
最后一行的 Math.max 需要加深理解,如 ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D'] 计算时应该为 8 而不是 7,该方法保证了没有任何空闲时调度时间最低为 tasks.length。
References
621. Task Scheduler