Меня только что опросили, и мне любопытно, каким должен быть ответ. Проблема была, по сути:
Скажем, у вас есть несортированный список из n целых чисел. Как вы находите k минимальных значений в этом списке? То есть, если у вас есть список [10, 11, 24, 12, 13] и вы ищете 2 минимальных значения, вы получите [10, 11].
У меня есть решение O (n * log (k)), и это мое лучшее, но мне любопытно, что придумают другие люди. Я воздержусь от загрязнения мозгов, опубликовав свое решение, и через некоторое время его отредактирую.
РЕДАКТИРОВАТЬ # 1: Например, такая функция, как:
list getMinVals (list & l, int k)
РЕДАКТИРОВАТЬ # 2: похоже, что это алгоритм выбора, поэтому я также добавлю свое решение; перебирая список и используя приоритетную очередь для сохранения минимальных значений. Спецификация очереди с приоритетами заключалась в том, что максимальные значения будут находиться в верхней части очереди с приоритетами, поэтому при сравнении вершины с элементом верх будет выталкиваться, а элемент меньшего размера выдвигаться. Предполагалось, что приоритетная очередь имеет O (log n) push и O (1) pop.