https://blog.csdn.net/qq_35937273/article/details/82724247 我理解的代码: #includebits/stdc++.h int ans[ 32 ]; int n,m,maxn,num; // 当两个数相异或的时候,其最高位相同,则异或后的数就会比原有的数小 // 我
https://blog.csdn.net/qq_35937273/article/details/82724247
我理解的代码:
#include<bits/stdc++.h> int ans[32]; int n,m,maxn,num; //当两个数相异或的时候,其最高位相同,则异或后的数就会比原有的数小 //我们只需要找到每个数的最高位 然后找到拥有最多元素的那个最高位 int main() { cin>>n; while(n--){ //测试案例 cin>>m; //数组元素个数 maxn=0; memset(ans,0,sizeof ans); for(int j=1;j<=m;j++){ cin>>num;//数组元素 for(int i=30;i>=0;i--){ //遍历最高位位数i if((1<<i)&num){ //此时i为num转化为二进制的最高位的位数 ans[i]++; //ans[i]数组记录 最高位为i位有ans[i]个元素 break; } } } for(int i=0;i<=30;i++)maxn=max(maxn,ans[i]); cout<<maxn<<endl; } return 0; }