338. Counting Bits
Содержание
Условие задачи
Дано неотрицательное целое число num
. Необходимо для каждого числа в диапозоне 0 ≤ i ≤ num
посчитать количество единиц в его бинарном представлении и вернуть массив этих данных.
пример 1
|
|
пример 2
|
|
Follow up
- Легко найти решение со сложность
O(n*sizeof(integer))
. предлагается найти решение с линейной сложностьюO(n)
. - Сложность по памяти должна быть
O(n)
- Сможете это сделать как супер профи? Без использования функции
__builtin_popcount
из c++ или подобных в другом языке?
Решение
Динамика
Идея решения через динамическое программирование такая:
Создаем результирующий массив. Записываем значения для 0
и 1
.
Создаем переменную где будем хранить следующую степень двойки cmp
. Инициализиурем со значением 2 ( если мы до этого записали 0,1, и 1 если до этого записали только 0). Далее идем по результирующему массиву и записываем в текущую ячейку значение по индекс idx-cmp/2
+ 1.
|
|