欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【LeetCode】621. 任务调度器

程序员文章站 2022-03-04 18:22:28
...

【LeetCode】621. 任务调度器
【LeetCode】621. 任务调度器

官方解法:进行排序操作

比如冷却时间为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;
}
相关标签: 算法