[LeetCode] 621. Task Scheduler (Medium)

原题


思路:
按频率最大的字母来分块,频率最大的字母个数-1为分成的块数,每一块个数为n+1
比如AAABBCE,n=2, 则分为A..A.. +A
AAABBBCCEE,n=2,则分为AB..AB.. +AB
答案 = MAX(原数组长度,所有分块的长度和 + 频率最大的字母种数)
仅当n=0时,答案是原数组长度。

class Solution {
public:
    int leastInterval(vector& tasks, int n) {
        unordered_map mp;
        int count = 0;
        for(auto e : tasks)
        {
            mp[e]++;
            count = max(count, mp[e]);
        }
        int ans = (count-1)*(n+1);
        for(auto e : mp) if(e.second == count) ans++;
        return max((int)tasks.size(), ans);
    }
};

你可能感兴趣的:([LeetCode] 621. Task Scheduler (Medium))