题目来源:https://leetcode-cn.com/problems/count-number-of-maximum-bitwise-or-subsets/
大致题意:
给一个数组,找出数组不同子集进行或运算的最大值,并返回最大值的个数
思路
- 设数组长度为 n,则非空子集一共有 2n-1 种
- 使用 n 位的二进制数标记当前子集中包含的元素,即第 i 为 1,就代表第 i 位元素在子集中,遍历二进制数即可得到或运算的值
- 遍历所有子集,统计最大值以及出现的次数
代码:
public int countMaxOrSubsets(int[] nums) {
int maxOr = 0;
int count = 0;
int n = nums.length;
// 遍历所有非空子集
for (int i = 1; i < 1 << n; i++) {
int orVal = 0;
for (int j = 0; j < n; j++) {
// ((i >> j) & 1) == 1 表示第 j 位在当前子集 i 中
if (((i >> j) & 1) == 1) {
orVal |= nums[j];
}
}
// 更新最大值以及个数
if (maxOr < orVal) {
maxOr = orVal;
count = 1;
} else if (maxOr == orVal) {
count++;
}
}
return count;
}