class Solution {
public:
int minKBitFlips(vector<int>& a, int K) {
int n=a.size();
int q[n+1],head=1,tail=0,ans=0;//队列里面放进入i代表 i~i+k-1有一次翻转
for(int i=0;i<n;++i){
if(head<=tail&&q[head]+K-1<i) ++head;
int sz=tail-head+1;
bool f=(a[i]&&!(sz&1))||(!a[i]&&(sz&1));
if(f) continue;
if(i>n-K) return -1;//不足K个 没权利改变了..
++ans,q[++tail]=i;
}
return ans;
}
};
答案好像修改了原数组,然后空间o(1),,那我们直接把原数组当成队列就好了…
class Solution {
public:
int minKBitFlips(vector<int>& a, int K) {
int n=a.size();
int head=0,tail=-1,ans=0;//队列里面放进入i代表 i~i+k-1有一次翻转
for(int i=0;i<n;++i){
if(head<=tail&&a[head]+K-1<i) ++head;
int sz=tail-head+1;
bool f=(a[i]&&!(sz&1))||(!a[i]&&(sz&1));
if(f) continue;
if(i>n-K) return -1;//不足K个 没权利改变了..
++ans,a[++tail]=i;
}
return ans;
}
};