У меня был только вопрос с вопросом, и мне любопытно, каким должен быть ответ. Проблема была, по существу:Оптимальный поиск минимальных значений k в несортированном списке целых чисел
Скажем, у вас есть несортированный список из n целых чисел. Как вы находите k минимальных значений в этом списке? То есть, если у вас есть список [10, 11, 24, 12, 13] и вы ищете два минимальных значения, вы получите [10, 11].
У меня есть решение O (n * log (k)), и это мое лучшее, но мне любопытно, что другие люди придумали. Я воздержусь от загрязняющих мозг людей, разместив свое решение и отредактирую его через некоторое время.
EDIT # 1: Например, функция, как: список getMinVals (список & л, внутр к)
EDIT # 2: Похоже, это алгоритм выбора, так что я буду бросать в моем решении также; итерация по списку и использование очереди приоритетов для сохранения минимальных значений. Спецификация в очереди приоритетов заключалась в том, что максимальные значения заканчиваются в верхней части очереди приоритетов, поэтому при сравнении вершины с элементом верхняя часть будет выскользнуть, а меньший элемент будет нажат. Это предполагало, что очередь приоритетов имела O (log n) push и O (1) pop.
Я помню, как это делалось год назад, и ответ, который я получил, не лучше, чем O (n * log (k)), поэтому я думаю, что у вас может быть уже это. – achinda99
По совпадению я должен был фактически реализовать это на работе только вчера. Это O (n * log (k)), хотя есть несколько разных способов добраться туда. – Crashworks
Всегда приятно слышать, что я не собирал интервью. Тем не менее, 2-3 решения, которые я пробовал раньше, вероятно, не очень помогли мне. –