Leetcode每日一题练习 ------ 2275. 按位与结果大于零的最长组合

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;
    }
};
1 个赞

感谢你的分享

1 个赞

来了,刷题佬!

1 个赞