解题思路
最开始想的是遇到0就反转 但是最终会超时无法通过所有测试例
代码
超时解97 / 110 个通过测试用例
class Solution {
public int minKBitFlips(int[] A, int K) {
int ans=0,right=0,left=0,n=A.length;
while (left<=n-K){
while (left<n && A[left]!=0){
left++;
}
if (left+K<=n){
for (int i=left;i<left+K;i++){
if (A[i]==0){
A[i]=1;
}else {
A[i]=0;
}
}
ans++;
}
}
for (int i=left;i<n;i++){
if(A[i]!=1){
return -1;
}
}
return ans;
}
}
class Solution {
public int minKBitFlips(int[] A, int K) {
int res = 0;
Deque<Integer> que = new LinkedList<>();
for (int i = 0; i < A.length; i++) {
if (que.size() > 0 && i > que.peek() + K - 1) {
que.removeFirst();
}
//1.本来是1,翻转奇数次变为0,所以需要再次翻转,放入队列
//2.本来是0,翻转偶数次还是0,所以需要再次翻转,放入队列
if (que.size() % 2 == A[i]) {
if (i + K > A.length) return -1;
que.add(i);
res += 1;
}
}
return res;
}
}