Сложность: hard
Дан бинарный массив nums и целое число k.
Операция переворота k-бит заключается в выборе подмассива длиной k из nums и одновременном изменении каждого 0 в подмассиве на 1 и каждого 1 в подмассиве на 0.
Верните минимальное количество k-битных переворотов, необходимых для того, чтобы в массиве не осталось 0. Если это невозможно, верните -1.
Подмассив - это непрерывная часть массива.
Пример:
Input: nums = [0,1,0], k = 1
Output: 2
Explanation: Flip nums[0], then flip nums[2].
👨💻 Алгоритм:
1⃣Инициализация переменных:
Создайте массив flip, чтобы отслеживать, сколько раз был перевернут каждый элемент.
Инициализируйте flips для отслеживания количества текущих переворотов.
2⃣Перебор элементов массива:
Для каждого элемента определите, необходимо ли его переворачивать, учитывая текущее количество переворотов и значение в массиве.
Если нужно перевернуть, увеличьте счетчик переворотов и обновите массив flip.
3⃣Проверка возможности выполнения задачи:
Если количество переворотов больше длины массива, верните -1.
😎 Решение:
var minKBitFlips = function(nums, k) {
let n = nums.length;
let flip = 0;
let flips = 0;
let flipQueue = new Array(n).fill(0);
for (let i = 0; i < n; i++) {
if (i >= k) {
flip ^= flipQueue[i - k];
}
if (nums[i] == flip) {
if (i + k > n) return -1;
flips++;
flip ^= 1;
flipQueue[i] = 1;
}
}
return flips;
};Ставь 👍 и забирай 📚 Базу знаний