Untitled
unknown
plain_text
2 years ago
1.0 kB
6
Indexable
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {//do the more frequent taks early
unordered_map<char,int>mp;
for(char c:tasks) mp[c]++;
priority_queue<int,vector<int>,less<int>>pq; //task frequency in maxHeap
for (auto it:mp) pq.push(it.second);
queue<pair<int,int>>q; //(task freq,time)
int time=0;
while(!pq.empty() || !q.empty()){
time++;
int freq=0;
if(!pq.empty()){
freq =pq.top()-1; //if we pop this our count of the no of taks done increases by 1
if(freq>0) q.push({freq,time+n}); //after we did this , we can redo this after time +n,only push into queue if freq is larger than 0
pq.pop(); }
if(!q.empty() && q.front().second<=time){ //we can do the task at front of queue if time is larger than queue time
pq.push(q.front().first);
q.pop(); }
}
return time;
}
};Editor is loading...
Leave a Comment