Вот как вы используете обе кучи. Обратите внимание, что я предполагаю, что вы не знаете количество элементов, и именно поэтому мы должны выталкивать, пока не извлечем что-то из минимальной кучи, которое больше или равно тому, что мы извлекаем из максимальной кучи. Обратите внимание, что мы возвращаем среднее значение, потому что в случае набора, подобного {1, 2, 3, 4}
, медиана на самом деле равна 2.5
(среднее из двух «средних» значений). Я предполагаю double
в качестве типа значения, но это может быть что угодно. Здесь:
double min = minheap.pop();
double max = maxheap.pop();
while(min < max) {
min = minheap.pop();
max = maxheap.pop();
}
return (min + max) / 2;
Поскольку всплывающее окно равно O(log n)
, и нам нужно выдвинуть O(n / 2)
значения, это O(n log n)
.