LEETCODE 621任务调度器

解题思路

采用用的比较多的统计词频的做法。先对char数组中的字频进行统计,然后排序。
比如AAABBCC这种串且n=2,可以使A _ _ A _ _ A _ _,然后把BC分别插进去。
网上有很多讨论一组空格可以直接放进去的博客,次数就不说了。着重记录一下以下情况

(1)AAABBCCDDEE,n=2;
(2)或者AABBCC,n=1(这种是maxCnt>n的情况)
即由最大词频空出的格子无法将剩余的字母全部放入,这种情况下的最短调度时间应该就是字符串(char数组)长度。
这也是代码中当使用公式计算出来的值小于字符串长度的情况,

即    tasks.length>(times[25]-1)*(n+1)+25-i   时

贴一个别人的说法,感觉很贴切,可以从优先队列的角度(或者是贪心也行),每次都选取最多的那个
在这里插入图片描述

代码如下

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] times = new int[26];
        for(char ch : tasks)
            times[ch-'A']++;
        Arrays.sort(times);
        int i = 25;
        while(i>=0 && times[i]==times[25])
            i--;
        return Math.max(tasks.length,(times[25]-1)*(n+1)+25-i);
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值