【LeetCode】621. 任务调度器
程序员文章站
2022-03-04 18:22:28
...
官方解法:进行排序操作
比如冷却时间为5。我6个一组进行排序。每次排序将剩的最多的任务放在前面。一种贪心的思想。反之,空闲碎片会更多。
public int leastInterval(char[] tasks, int n) {
int taskNum = tasks.length; // 一共的任务数量
int[] map = new int[26];//用来记录每一种任务的个数
for (char task : tasks) {
map[task - 'A']++;
}
Arrays.sort(map); // 将map进行升序排列。
int count = 0; // 记录执行时间。
out:
while (true) {
// 用来确定至少还含有一个元素。
if (map[25] == 0) break;
int p = 25;
// 经过n+1轮填充。
for (int i = n + 1; i >= 1; i--) {
if (taskNum == 0) break out;
if (p < 0 || map[p] == 0) {
count += i;
break;
} else {
map[p--]--;
taskNum--;
count++;
}
}
// 进行排序
Arrays.sort(map);
}
return count;
}
下一篇: node.js中用户密码的加密