The bitwise AND of an array nums is the bitwise AND of all integers in nums.
For example, for nums = [1, 5, 3], the bitwise AND is equal to 1 & 5 & 3 = 1.
Also, for nums = [7], the bitwise AND is 7.
You are given an array of positive integers candidates. Evaluate the bitwise AND of every combination of numbers of candidates. Each number in candidates may only be used once in each combination.
Return the size of the largest combination of candidates with a bitwise AND greater than 0.
Example 1:
Input: candidates = [16,17,71,62,12,24,14]
Output: 4
Explanation: The combination [16,17,62,24] has a bitwise AND of 16 & 17 & 62 & 24 = 16 > 0.
The size of the combination is 4.
It can be shown that no combination with a size greater than 4 has a bitwise AND greater than 0.
Note that more than one combination may have the largest size.
For example, the combination [62,12,24,14] has a bitwise AND of 62 & 12 & 24 & 14 = 8 > 0.
Example 2:
Input: candidates = [8,8]
Output: 2
Explanation: The largest combination [8,8] has a bitwise AND of 8 & 8 = 8 > 0.
The size of the combination is 2, so we return 2.
Constraints:
- 1 <= candidates.length <= 105
- 1 <= candidates[i] <= 107
做 AND 操作最后结果要>0, 从二进制的角度来看就是 32 位(candidates 是 32 位整数数组)中至少有 1 位是 1,而 AND 的操作决定了参与操作的数字只要某一位是 0,那得到的结果这一位一定是 0,所以我们只要每次从 candidates 里面挑出固定某一位不为 0 的数,他们的 AND 结果一定是这一位不为 0 的,也就是符合要求的。
impl Solution {
pub fn largest_combination(mut candidates: Vec<i32>) -> i32 {
let mut ans = vec![0; 32];
for n in &mut candidates {
for i in 0..32 {
if *n & 1 == 1 {
ans[31 - i] += 1;
}
*n >>= 1;
}
}
ans.into_iter().max().unwrap()
}
}