of n number of tasks, implement a task scheduler method,
minimumMachinesNumber, to run in O(n logn) time that finds the minimum number of machines required to complete these n tasks.
Constraints:
* Task start time ≤ Task end time
Examples
Input
[[1, 7], [8, 13], [5, 6], [10, 14], [6, 7]]
Output
2
Input
[[2, 5], [2, 5], [2,5], [2, 5]]
Output
4
Подскажите, будет ли корректным, если я решу её через монотонную очередь? Грубо говоря вот так (сам я не очень уверен в корректности данного решения)
fun minimumMachinesNumber(tasks: Array<IntArray>): Int {
// Sort tasks by start time
tasks.sortBy { it[0] }
// Create a priority queue to store the end times of running tasks
val pq = PriorityQueue<Int>()
// Loop through tasks and add them to the priority queue
for (task in tasks) {
// If the priority queue is not empty and the earliest end time is less than or equal to the current task's start time,
// remove it from the priority queue since it has finished running
while (pq.isNotEmpty() && pq.peek() <= task[0]) {
pq.poll()
}
// Add the current task's end time to the priority queue
pq.offer(task[1])
}
// The size of the priority queue is the minimum number of machines required
return pq.size
}
Вообще я не уверен, нужна ли тут приоритетная очередь, но в целом даже с учетом текущего решения, что вы имеете в виду под "смотреть размер очереди надо в цикле"?
Обсуждают сегодня