Последний оставшийся элемент после многократного удаления нечетных индексированных элементов

Опубликовано: 21 Сентября, 2022

Учитывая положительное целое число N , задача состоит в том, чтобы напечатать последний оставшийся элемент из последовательности [1, N] после многократного удаления всех элементов с нечетным индексом из последовательности.

Примеры:

Input: N = 4
Output: 4
Explanation: 

Input: N = 9
Output: 8

Наивный подход: Наивный подход к решению вышеуказанной проблемы заключается в сохранении последовательности. Повторите последовательность и удалите из нее элементы с нечетным индексом. Повторяйте вышеуказанные шаги, пока не останется только один элемент.

Временная сложность: O(N logN)
Вспомогательное пространство: O(1)

Эффективный подход: рассмотрите следующее наблюдение:

  • На первом шаге будут удалены все нечетные элементы с разницей в 2
  • На втором шаге будут удалены все четные элементы, начиная с 2, с разницей 4
  • На втором шаге будут удалены все четные элементы, начиная с 4, с разницей 8
  • Точно так же на следующем шаге будут удалены все элементы с разностью 16 и так далее.
  • Таким образом, на каждом шаге вы можете видеть, что элементы с разницей 2 X будут удалены.
  • При этом в конечном итоге будут удалены все элементы, кроме наибольшей степени двойки, присутствующей в последовательности.

Из приведенных выше наблюдений можно сделать вывод, что:

last remaining element (L) = log2 N

Ниже приведена реализация описанного выше подхода.

Временная сложность: O(1)
Вспомогательное пространство: O(1)