Single-Threaded CPU
MediumArraySortingHeap (Priority Queue)
Solution
import { Heap } from '@algorithm/lib';
export function getOrder(tasks: number[][]): number[] {
const scheduled = tasks
.map(([enqueueTime, processingTime], i) => [enqueueTime, processingTime, i])
.sort((a, b) => (a[0] !== b[0] ? b[0] - a[0] : b[1] - a[1]));
const answer: number[] = [];
const queue = new Heap<[number, number]>((a, b) => (a[0] !== b[0] ? a[0] - b[0] : a[1] - b[1]));
let currentTime = 0;
while (0 < scheduled.length || !queue.isEmpty) {
if (queue.isEmpty && currentTime < scheduled[scheduled.length - 1][0]) {
currentTime = scheduled[scheduled.length - 1][0];
}
while (0 < scheduled.length && scheduled[scheduled.length - 1][0] <= currentTime) {
const lastScheduled = scheduled.pop();
if (lastScheduled) {
const [, processingTime, i] = lastScheduled;
queue.push([processingTime, i]);
}
}
const lastQueue = queue.pop();
if (lastQueue) {
const [processingTime, i] = lastQueue;
currentTime += processingTime;
answer.push(i);
}
}
return answer;
}