leetcode-621. 任务调度器

 

leetcode-621. 任务调度器

 解析参考:

https://leetcode-cn.com/problems/task-scheduler/solution/tong-zi-by-popopop/

class Solution {
public:


    /*
    结合桶的思想,我们只需要计算两个数,第一:一个是找出最大任务数量 N,
    看一下任务数量并列最多的任务有多少个,即最后一个桶子的任务数 X,,有几个,则X为几
    可以计算 出NUM1=(N-1)*(n+1)+x
    第二:NUM2=tasks.size()
    输出其中较大值即可
    因为存在空闲时间时肯定是 NUM1 大,不存在空闲时间时肯定是 NUM2>=NUM1
    */
    int leastInterval(vector<char>& tasks, int n) {
        if(tasks.size()==0)
            return 0;
        unordered_map<char,int> in_map;
        int maxval = 0;
        for(int i =0; i < tasks.size(); i++){
            in_map[tasks[i]]++;
            maxval = max(maxval,in_map[tasks[i]]); // 同类任务数量最大值
        }
        int lastcount = 0;
        for(auto it = in_map.begin(); it!=in_map.end(); it++){
            if(it->second==maxval)   // first 是hash表第一个元素,second是第二个元素
                lastcount++;
        }
        // return  max((maxval-1)*(n+1)+lastcount, tasks.size());  
        // 因为task是引用,所以不能用max,max参数里面不能含有引用
        
        int temp = tasks.size();
        return max((n + 1) * (maxval - 1) + lastcount, temp);;

    }
};

 

上一篇:Java 并发编程学习(五):批量并行执行任务的两种方式


下一篇:vscode输出中文乱码