为使01数组都为1,连续K位flip的最少次数
int minKBitFlips(vector<int>& A, int K) {
// 若翻转A[i..i+K-1],将i放入双端队列q
// 对A[i]有影响的是有效窗口[i-K+1,i-1]内的翻转次数q.size()
// 若A[i]==0&&q.size()%2==0 或 A[i]==1&&q.size()%2==1,要翻转
const int N = A.size();
int ans = 0;
deque<int> q;
for (int i = 0; i < N; i++) {
if (!q.empty() && q.front() < i - K + 1) {
q.pop_front();
}
if (A[i] == q.size() % 2) { // 要翻转
if (i + K - 1 >= N) return -1;
q.push_back(i);
ans++;
}
}
return ans;
}