8.11贝壳找房,第三题

题目:求最大子数组异或和的最小长度
解答:前缀异或和,n方解法,只过了20%,求解答。
#贝壳找房##笔试题目#
全部评论
dp
1
送花
回复 分享
发布于 2020-08-12 09:23
是或
点赞
送花
回复 分享
发布于 2020-08-11 22:35
神州信息
校招火热招聘中
官网直投
#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; }
点赞
送花
回复 分享
发布于 2020-08-12 14:12

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务