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
}