Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- typedef pair<int, int> pii;
- vector<int> getOrder(vector<vector<int>>& tasks) {
- priority_queue<pii, vector<pii>, greater<pii>> pq;
- long int time=0, N=tasks.size();
- vector<int> res;
- // Add index to tasks and sort the tasks based on enqueue time.
- for(int i=0; i<N; i++)
- tasks[i].push_back(i);
- sort(tasks.begin(), tasks.end());
- int i=0;
- while(!pq.empty() || i<N){
- // If heap is empty and cpu is idle, move time to start of next task.
- if(pq.empty())
- time = max(time, long(tasks[i][0]));
- // Add all tasks whose enqueue time is less than current time.
- while(i<N && tasks[i][0] <= time){
- pq.push({tasks[i][1], tasks[i][2]});
- i++;
- }
- // Pick up the least processing time task and execute.
- time += pq.top().first;
- res.push_back(pq.top().second);
- pq.pop();
- }
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment