621. 任务调度器
Q:
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
map<char,int>dc;
for(char c:tasks){
dc[c]+=1;
}
vector<int>dic;
for(auto pair:dc){
dic.push_back(pair.second);
}
int cnt=0;
make_heap(dic.begin(),dic.end());
while(not dic.empty()){
vector<int>temp;
int i=0;
while(not dic.empty() and i<n+1){
temp.push_back(dic[0]);
temp.back()-=1;
pop_heap(dic.begin(),dic.end());
dic.pop_back();
++i;
}
for (int x:temp){
if (x){
dic.push_back(x);
}
}
if (not dic.empty()){
cnt+=n+1;
push_heap(dic.begin(),dic.end());
}
else{
cnt+=i;
break;
}
}
return cnt;
}
};
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
map<char,int> mp;
for(char c:tasks){
mp[c]+=1;
}
vector<int> dic;
int cnt=0;
for(auto pair:mp){
dic.push_back(pair.second);
}
sort(dic.begin(),dic.end());
while(not dic.empty()){
int i=0,pos=dic.size()-1;
while(pos-i>=0 and i<n+1){
dic[pos-i]-=1;
++i;
}
sort(dic.begin(),dic.end());
int j=0;
while(j<=pos and dic[j]==0){
++j;
}
dic.erase(dic.begin(),dic.begin()+j);
if(dic.empty()){
cnt+=i;
}
else{
cnt+=n+1;
}
}
return cnt;
}
};
进击的小🐴农