Максимальное количество раз Массив можно уменьшить вдвое, если все его элементы четные
Учитывая массив arr , задача состоит в том, чтобы выполнить операции над массивом, когда все элементы в массиве четные. За одну операцию замените каждое целое число X в массиве на X/2 . Найдите максимально возможное количество операций, которые вы можете выполнить.
Примеры:
Input: arr[] = {8, 12, 40}
Output: 2
Explanation: Initially, {8, 12, 40} are present in array. Since all those integers are even,
you can perform the operation. After the operation is performed once, array becomes
{4, 6, 20}. Since all those integers are again even, we can perform the operation again.
After the operation is performed twice, array becomes {2, 3, 10}. Now, there is an odd
number “3” in the array, so no operation can be performed anymore.
Thus, you can perform the operation at most twice.Input: arr[] = {5, 6, 8, 10}
Output: 0
Explanation: Since there is an odd number 5 in the initial array, we cant perform the
operation even once.
Подход: Данную проблему можно решить, сделав несколько простых наблюдений:
- Если все целые числа в массиве на данный момент четные, то делим все числа на 2.
- Таким образом, задача сводится к тому, чтобы найти, сколько раз элемент arr[i] можно разделить на 2. Пусть это будет times[i] . Ответ — минимальное значение times[i] для всех i.
- Вместо использования дополнительного массива times[] мы можем обновлять ответ на каждом этапе, просто сохраняя переменную, это уменьшает сложность пространства до O(1), поскольку мы не используем никакого дополнительного пространства.
Ниже приведена реализация вышеизложенной идеи.
Временная сложность: O(32 * n)
Космическая сложность: O(1)