为使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;
}