来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-combination-with-bitwise-and-greater-than-zero/description/?envType=daily-question&envId=2025-01-12
题目:
对数组 nums 执行 按位与 相当于对数组 nums 中的所有整数执行 按位与 。
例如,对 nums = [1, 5, 3] 来说,按位与等于 1 & 5 & 3 = 1 。
同样,对 nums = [7] 而言,按位与等于 7 。
给你一个正整数数组 candidates 。计算 candidates 中的数字每种组合下 按位与 的结果。
返回按位与结果大于 0 的 最长 组合的长度。
解题思路:
按位与:二进制运算的一种,如果两个二进制数都为1,按位与后结果为1,否则为0
因此,可以依次按每一位遍历nums数组中每个数,如果这一位是1,则可以取这个数,否则不取,最后ans取最大值
答案代码:
class Solution {
public:
int largestCombination(vector
int n = candidates.size(),ans = -1;
for(int i = 0;i <= 24;i++){
int cnt = 0;
for(int j = 0;j < n;j++){
cnt += candidates[j] >> i & 1;
}
ans = max(ans,cnt);
}
return ans;
}
};
代码分析:
题目数据给的是10^7,转为二进制最多24位,因此第一重循环的范围设置为24,第二重循环遍历数组每个元素的这一位,如果是1,就加上,不是就不取