解析参考:
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);; } };