0%

Leetcode995 Minimum Number of K Consecutive Bit Flips

Leetcode995 Minimum Number of K Consecutive Bit Flips

##题目描述
In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray of length K and simultaneously changing every 0 in the subarray to 1, and every 1 in the subarray to 0.

Return the minimum number of K-bit flips required so that there is no 0 in the array. If it is not possible, return -1.

Example 1:

1
2
3
Input: A = [0,1,0], K = 1
Output: 2
Explanation: Flip A[0], then flip A[2].

Example 2:

1
2
3
Input: A = [1,1,0], K = 2
Output: -1
Explanation: No matter how we flip subarrays of size 2, we can't make the array become [1,1,1].

Example 3:

1
2
3
4
5
6
Input: A = [0,0,0,1,0,1,1,0], K = 3
Output: 3
Explanation:
Flip A[0],A[1],A[2]: A becomes [1,1,1,1,0,1,1,0]
Flip A[4],A[5],A[6]: A becomes [1,1,1,1,1,0,0,0]
Flip A[5],A[6],A[7]: A becomes [1,1,1,1,1,1,1,1]

##思路
思路:先找到第一个0,找到第一个0以后,如果第一个0的位置i,i+k>当前数组的长度,则返回-1. 反之,在K循环里,对当前值进行按位异或(^=)且轮数加一。最后返回轮数。
##代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int minKBitFlips(int[] A, int K) {
int result=0;
int i=0;
while(i<A.length){
if(A[i]==0){
if(i+K>A.length)
return -1;
else{
for(int j=0;j<K;j++){
A[i+j]^=1;
}
result++;
}
}else
i++;
}
return result;
}
}
-------------本文结束感谢您的阅读-------------

Welcome to my other publishing channels