https://leetcode.com/problems/binary-prefix-divisible-by-5 | Easy |
---|
Дан бинарный массив nums
. Мы определяем x_i
как число, представляющее собой первые i + 1
элементов массива nums
в виде двоичного числа. Требуется вернуть массив булевых значений result
, где result[i]
равно true
, если x_i
делится на 5, и false
в противном случае.
Input:
nums = [0, 1, 1]Output:
[true, false, false]Explanation:
x_0 = 0 (в двоичном виде "0") делится на 5. x_1 = 1 (в двоичном виде "01") не делится на 5. x_2 = 3 (в двоичном виде "011") не делится на 5.
Input:
nums = [1, 1, 1]Output:
[false, false, false]
fun prefixesDivBy5(nums: IntArray): List<Boolean> {
val result = mutableListOf<Boolean>()
var currentNumber = 0
for (num in nums) {
// Сдвигаем текущее число влево на 1 бит и добавляем текущий бит
currentNumber = (currentNumber shl 1) or num
// Проверяем, делится ли текущее число на 5
result.add(currentNumber % 5 == 0)
// Чтобы избежать переполнения, берем остаток от деления на 5
currentNumber %= 5
}
return result
}
O(n), где n — длина массива nums
, поскольку мы проходим по массиву один раз.
O(n), так как мы создаем список result
длиной n для хранения результатов.