原题说明
In an array A
containing only 0
s and 1
s, 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:
Input:
A = [0,1,0], K = 1
Output:2
Explanation: FlipA[0]
, then flipA[2]
.
Example 2:
Input:
A = [1,1,0], K = 2
Output:-1
Explanation: No matter how we flip subarrays of size2
, we can’t make the array become[1,1,1]
.
Example 3:
Input:
A = [0,0,0,1,0,1,1,0], K = 3
Output:3
Explanation:
FlipA[0]
,A[1]
,A[2]
:A
becomes[1,1,1,1,0,1,1,0]
FlipA[4]
,A[5]
,A[6]
:A
becomes[1,1,1,1,1,0,0,0]
FlipA[5]
,A[6]
,A[7]
:A
becomes[1,1,1,1,1,1,1,1]
Note:
解题思路
先从数组的最左元素开始,因为要改变最左元素的状态,只能以这个元素为起始点。
如果这个元素是1
,那么不需要kBitFlip
操作;如果这个元素是0
, 那么需要进行一次kBitFlip
操作, kBitFlip
的操作次数 ++ans
。当元素值变为1
之后,进入下一个元素判断。
这样的操作最多进行A.size() - K + 1
次。这样能保证index
从0
到A.size() - K
的值都是1
,只需要对剩下的元素进行检查。如果有0
,return -1
;否则return
kBitFlip
的操作次数ans
。
示例代码 (cpp)
1 | class Solution { |
复杂度分析
时间复杂度: O(N * K)
空间复杂度: O(1)
归纳总结
我们在Youtube上更新了视频讲解,欢迎关注!