✅ Решение задачи 703Time: O(n log(k))
Space: O(k)
💡 Идея🟦Для решения используем минимальную кучу, то есть
PriorityQueue, в которой хранятся только
k самых больших чисел. Самое маленькое из них — это как раз
k-й по величине элемент
🟦При добавлении нового числа используем метод
add:
➖если в куче меньше
k элементов — число просто добавляется
➖если уже есть
k элементов, то новое число сравнивается с наименьшим в куче:
▫если оно больше, то старое удаляется и добавляется новое, иначе шаг просто пропускается
▫так мы всегда поддерживаем только
k самых больших чисел из всех, которые встречались
🟦В результате, верхушка кучи всегда содержит
k-й по величине элемент, что позволяет эффективно работать даже с большим потоком данных, так как операция добавления занимает
O(log k) и не требуется хранить все числа — только
k нужных
👩💻 Java Algo |
#solution703