Сложность: medium
Даны два целых числа left и right, обозначающие диапазон [left, right].
Нужно вернуть результат побитового AND всех чисел в этом диапазоне (включительно).
Пример:
Input: left = 5, right = 7 Output: 4
👨💻 Алгоритм:
1⃣Пока left < right, сдвигаем оба числа вправо (>>= 1), пока они не станут равны. Это находит общий префикс битов.
2⃣Подсчитываем количество сдвигов — это количество младших битов, которые могут изменяться в диапазоне, и обнуляются при AND.
3⃣После этого сдвигаем результат left обратно влево (<< shift) — возвращаем биты на место.
😎 Решение:
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int shift = 0;
while (m < n) {
m >>= 1;
n >>= 1;
++shift;
}
return m << shift;
}
};Ставь 👍 и забирай 📚 Базу знаний
