Я пытаюсь решить проблему в O (n) времени, когда, учитывая два передних итератора перед контейнером и задней частью контейнера, я хочу удалить все элементы в контейнере, которые не отображаются в наименее < это число> раз. Например, для вектора строк, таких как («john», «hello», «one», «yes», «hello», «one»), и я хотел удалить все элементы, которые появляются менее чем в 2 раза, конечный вектор затем будет содержать только («привет», «один»).Можно ли в общем случае сортировать линейное время?
Я думал, что если бы я мог сортировать в O (n) время, я мог бы выполнить этот результат (в O (n) время), но мне тяжело это делать со строками, ints, chars, или что-либо еще (в общем). Я думаю об этом правильно, или есть более простой способ решить проблему?
Сравнение сортов являются наиболее распространенными, и не может быть сделано в O (N) времени. Однако, если вы знаете подробности о своих данных, некоторые O (1) могут быть сделаны. На самом деле, я бы рекомендовал использовать 'std :: unordered_map' и строки преобразования для подсчета, а не для сортировки данных. –
№ п/п №. № –
OP ничего не говорит о сортировке ... Я удивлен, что никто не привел никаких алгоритмов сортировки без сравнения, которые являются O (n). – thang