Да. Вы можете сделать это в O (k log n). Чтобы объяснить процедуру, рассмотрим пример массива [30,20,10,9,7,5]
.
Структура кучи для этого определяется следующим образом:
Сейчас , у нас есть следующий шаблон:
- 1-й элемент мин -> 6-й элемент макс.
- 2-й элемент мин. -> 5-й элемент макс.
- 3-й элемент мин. -> 4-й элемент max
- ..
- ..
- ..
- элемент kth min -> (n-k + 1) th элемент max
Например, в нашем примере элемент 5th min -> элемент 2nd max -> 20