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.
|
|