😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
给定一个二进制数组 nums 和一个整数 k 。
k位翻转 就是从 nums 中选择一个长度为 k 的 子数组 ,同时把子数组中的每一个 0 都改成 1 ,把子数组中的每一个 1 都改成 0 。
返回数组中不存在 0 所需的最小 k位翻转 次数。如果不可能,则返回 -1 。
子数组 是数组的 连续 部分。
2、基础框架
- Java版本框架代码如下:
class Solution {
public int minKBitFlips(int[] nums, int k) {
}
}
3、原题链接
二、解题报告
1、思路分析
这道题本人并没有ac,参考了这里,语言不好描述,这个博主写的通俗易懂。
2、代码详解
class Solution {
public int minKBitFlips(int[] nums, int k) {
int res = 0;
Deque<Integer> que = new LinkedList<>();
for(int i = 0;i < nums.length;i++) {
if(que.size() > 0 && i > que.peek() + k - 1) {
que.removeFirst();
}
if(que.size()%2 == nums[i]) {
if(i + k> nums.length) {
return -1;
}
que.add(i);
res++;
}
}
return res++;
}
}
三、本题知识
滑动窗口