621. Task Scheduler

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'; // 注意减去 A 而不是减去 0
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