题目
解法思路: 差分数组,滑动窗口
代码记录
#base method 基础方案,会超时
class Solution:
def minKBitFlips(self, A: List[int], K: int) -> int:
res=0
for i in range(len(A)-K+1):
if A[i]==0:
for j in range(K):
A[i+j]=1-A[i+j]
res+=1
for i in range(len(A)-K+1,len(A)):
if A[i]!=1:
return -1
return res
# #diff array 方法一
class Solution:
def minKBitFlips(self, A: List[int], K: int) -> int:
N=len(A)
diff=[0 for i in range(N+1)]
ans=0
revCnt=0
for i in range(N):
revCnt += diff[i]
if (revCnt+A[i])%2==0:
if i+K>N:
return -1
ans+=1
revCnt+=1
diff[i+K]-=1
return ans
#omit diff array 方法二
class Solution:
def minKBitFlips(self, A: List[int], K: int) -> int:
N=len(A)
ans=0
revCnt=0
for i in range(N):
if i>=K and A[i-K]>1:
revCnt += 1
if (revCnt+A[i])%2==0:
if i+K>N:
return -1
ans+=1
revCnt+=1
A[i]=2
return ans