621. 任务调度器

2021-10-25  本文已影响0人  justonemoretry
image.png

解法

用桶的思路,按最大元素数进行分桶,每个桶的容量为n+1,这样最大元素数就能保证可以执行,要么有空闲,要么没空闲,所有的元素都能执行,这样就是任务的数量,这种就是带F的情况,会大于公式计算的。


image.png
class Solution {
    public int leastInterval(char[] tasks, int n) {
        // 记录不同任务出现的次数
        int[] nums = new int[26];
        for (char c : tasks) {
            nums[c - 'A']++;
        }
        // 进行排序
        Arrays.sort(nums);
        // 计算等于最大数量的元素有几个
        int cnt = 1;
        int maxCount = nums[25];
        for (int i = nums.length - 1; i > 0; i--) {
            if (nums[i] == nums[i - 1]) {
                cnt++;
            } else {
                break;
            }
        }
        // 最大数目代表桶数,每桶有n+1的空间,这样最大数目的任务可以冷却
        // 如果不同的任务很多,塞满(maxCount - 1) * (n + 1)后,还要放,那就是没有冷却的情况,和tasks.length一样大
        // cnt代表和最大元素数相同的数目,在最后一行,数目为cnt
        return Math.max(tasks.length, (maxCount - 1) * (n + 1) + cnt);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读