leetcode 621. Task Scheduler

https://www.cnblogs.com/grandyang/p/7098764.html

将个数出现最多的那个字符作为分隔的标准,一定是最小的。所以这个时候只需要计算还需要添加多少个idel就能找到整个的个数。

方法是:先计算个数最多的字符,并且判断有没有跟他个数相同的,如果这个字符出现的次数是3次,那其实只需要中间有2个部分进行填充。同时注意这种有重复个数的字符,这些个数重复的字符也只有n-1个在这2个部分。然后就算剩下的有多少字符,并且需要多少个字符,再根据这个进行补充。

class Solution {
public:
    int leastInterval(vector<char>& tasks, int n) {
        int length = tasks.size();
        vector<int> charecter(26,0);
        for(char task : tasks)
            charecter[task - 'A']++;
        int max_num = 0,max_number = 0;
        for(int i = 0;i < 26;i++){
            if(charecter[i] > max_num){
                max_num = charecter[i];
                max_number = 1;
            }
            else if(charecter[i] == max_num)
                max_number++;
        }
        int blank = (n - max_number + 1) * (max_num - 1);
        int left = tasks.size() - max_num * max_number;
        int idle_num = blank > left ? blank - left : 0;
        return tasks.size() + idle_num;
    }
};

 

posted @ 2019-03-08 17:54  有梦就要去实现他  阅读(146)  评论(0编辑  收藏  举报