美文网首页
621. 任务调度器

621. 任务调度器

作者: justonemoretry | 来源:发表于2021-10-25 23:46 被阅读0次
    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);
        }
    }
    

    相关文章

      网友评论

          本文标题:621. 任务调度器

          本文链接:https://www.haomeiwen.com/subject/wlcealtx.html