从Leetcode 每日一题练习继续讨论:
2275. 按位与结果大于零的最长组合
2275. Largest Combination With Bitwise AND Greater Than Zero
题解
本题要得到最长的按位与和大于0的数字组合的长度。这种涉及位运算的题目就要从二进制的角度来看,按位与的特点是参与运算的数字中只要有一个在第n位上为0,最终得到的结果在该位上就为0。因此要保证最终得到的结果不为0,至少要保证所有参与运算的数字在某一个相同的二进制位上均为1,则可构造一个数组表示某个二进制位上为1的数字个数。遍历candidates,对每个遍历的数字,将其所有为1的二进制位对应的数组中的数字加1,最终即可得到全部二进制位对应的为1的数字个数,取其中的最大值即得结果。
注意本题给定条件candidates中数字不大于10^7,用24位二进制位即可表示,可以构建一个长度位25的数组来表示25个不同二进制位上为1的数字个数。
代码
class Solution {
public:
int largestCombination(vector<int>& candidates) {
vector<int> count(25,0);
for (int can : candidates){
int i = 1;
while(can > 0){
if((can & 1) == 1){
count[i]++;
}
can = can >> 1;
i++;
}
}
int max = 0;
for (int co : count){
if (co > max){
max = co;
}
}
return max;
}
};