1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| // @Title: K 连续位的最小翻转次数 (Minimum Number of K Consecutive Bit Flips)
// @Author: 15816537946@163.com
// @Date: 2021-02-18 19:07:45
// @Runtime: 112 ms
// @Memory: 7.3 MB
func minKBitFlips(A []int, K int) (ans int) {
n := len(A)
revCnt := 0
for i, v := range A {
if i >= K && A[i-K] > 1 {
revCnt ^= 1
A[i-K] -= 2 // 复原数组元素,若允许修改数组A, 则可以省略
}
if v == revCnt {
if i+K > n {
return -1
}
ans++
revCnt ^= 1
A[i] += 2
}
}
return
}
|