Задача: BinaryGap
Решение:
Алгоритм такой:
1. Сдвинуть вправо 0-й бит, пока не встретится 1-й бит;
2. Пока у нас есть 1-й бит в переменной, сдвигаем все биты вправо и считаем 0-е биты;
3. Каждый раз, когда мы встречаем конец текущего промежутка, устанавливаем его как максимальный промежуток, если он больше, чем предыдущий максимальный промежуток;
4. Вернуть последний максимальный зазор;
Решение не использует дополнительную память, за исключением двух счетчиков, то есть имеет постоянную сложность памяти O (1). Решение выполняет один проход по всем битам, то есть решение имеет временную сложность O (N), где N - количество бит в данной переменной.
Вернитесь к оглавлению.