全部评论
dp
是或
#include<bits/stdc++.h> using namespace std; /* O(n) */ void add(int cnt[],int num,int& count){ int i=0; while(num){ if(num&1){//如果该数字当前位为1 cnt[i]++; if(cnt[i]==1) count++; } num>>=1; } } void sub(int cnt[],int num,int& count){ int i=0; while(num){ if(num&1){ cnt[i]--; if(cnt[i]==0) count--; } num>>=1; } } int main() { int n; cin>>n; vector<int> nums(n,0); int maxVal=0; int res=n; int cnt[32]={0};//统计每一位1出现的次数 int w[32]={0};//统计窗口中每一位上1出现的次数 int count=0; int tmp=0; for(int i=0; i<n; i++) { cin>>nums[i]; maxVal|=nums[i]; add(cnt,nums[i],count); } int left=0,right=0; while(right<n) { add(w,nums[right++],tmp); while(tmp==count){ res=min(res,right-left); sub(w,nums[left++],tmp); } } cout<<res<<endl; return 0; }
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享