Дан вектор std::vector<std::size_t>. Как наиболее эффективно получить медиану уникальных элементов вектора? Например, для вектора 1,6,3,1,5,1,2 -> 1,2,3,5,6 -> 3
На ум приходит только решение с копированием элементов вектора в std::set<std::size_t> и взятие цетрального элемента, но итератор не даёт сделать это за константу.
За константу вряд ли у вас что получится. Как я понимаю, вектор уже отсортирован? тогда
v[(unique(v.begin(),v.end())-v.begin())/2]
за O(N)
Если вектор не отсортирован - то еще и сортировка; итого O(N log N)
Если четко известен диапазон значений и он небольшой - то блочная сортировка спасает - опять до O(N)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости