跳转至

621.任务调度器 (Medium)*

题目描述*

标签*

贪心算法;队列;

思路 & 代码*

相同任务间有冷却时间,所以尽可能把不同的任务放到间隙中。可以看成 n + 1 容量的桶,每个桶内不能放相同的任务,看最多需要几个桶。最后的时间就是 (cnt - 1) * (n + 1) + last。而 last 部分计算次数同为最大的任务个数即可。

class Solution {
public:
    int leastInterval(vector<char>& tasks, int n) {
        vector<int> cnt(26, 0);
        for(auto& c : tasks) {
            cnt[c - 'A']++;
        }
        int maxCnt = 0, equalCnt = -1;
        for(auto& i : cnt) {
            maxCnt = max(i, maxCnt);
        }
        for(auto& i : cnt) {
            if(i == maxCnt) {
                equalCnt++;
            }
        }
        return max((maxCnt - 1) * n + maxCnt + equalCnt, static_cast<int>(tasks.size()));
    }
};

最后更新: July 23, 2022