621. 任务调度器

2022-01-03  本文已影响0人  名字是乱打的

一 题目:

二 思路:

方法(贪心算法)
容易想到的一种贪心策略为:先安排出现次数最多的任务,让这个任务两次执行的时间间隔正好为n。再在这个时间间隔内填充其他的任务。

例如:tasks = ["A","A","A","B","B","B"], n = 2

作者:lan-se-bei-ban-qiu
链接:https://leetcode-cn.com/problems/task-scheduler/solution/jian-ming-yi-dong-de-javajie-da-by-lan-s-jfl9/
来源:力扣(LeetCode)

三 代码:

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] buckets= new int[26];
        //统计每个元素出现的次数
        for (char task : tasks) {
            buckets[task-'A']++;
        }

        //按出现的次数进行排序
        Arrays.sort(buckets);
        
        //最先最多次数的字符的次数
        int maxTime=buckets[25];
        //maxCount为一共有多少个任务和出现最多的那个任务出现次数一样。
        int maxCount=1;
        for (int i = 25; i >=1 ; i--) {
            if (buckets[i-1]==buckets[I]){
                maxCount++;
            }else {
                break;
            }
        }

        int res=(maxTime-1)*(n+1)+maxCount;

        //极端情况,如果任务种类多,不需要冷却,直接就运行就ok,那么所需时间为任务的长度
        return Math.max(res,tasks.length);
    }
}
上一篇下一篇

猜你喜欢

热点阅读