Сначала найдите медиану данного массива (это занимает линейное время ).
Тогда, просто пройдите через массив и суммируйте все элементы, которые больше, чем медиана.
Подсчитайте, сколько элементов вы суммировали (M
). Если M < N/2
, то это означает, что несколько элементов, которые равны медианному значению (а именно, N/2 - M
), принадлежат верхней половине. Добавьте к своей сумме столько средних значений. Нам нужна эта сложность, потому что мы не знаем, сколько медианных элементов (их может быть несколько) принадлежит верхней половине: если мы возьмем их все, мы можем в итоге сложить более N/2
элементов.
Теперь у вас есть сумма верхней половины массива. Разделите на N/2
, и все готово.