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 to1 & 5 & 3 = 1. - Also, for
nums = [7], the bitwise AND is7.
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 <= 1051 <= candidates[i] <= 107
Approach 01:
-
C++
-
Python
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int largestCombination(vector<int>& candidates) {
constexpr int maxBitPosition = 24;
int maxCount = 0;
for (int bitPosition = 0; bitPosition < maxBitPosition; ++bitPosition) {
int currentBitCount = 0;
for (const int candidate : candidates) {
if (candidate >> bitPosition & 1)
++currentBitCount;
}
maxCount = max(maxCount, currentBitCount);
}
return maxCount;
}
};
from typing import List
class Solution:
def largestCombination(self, candidates: List[int]) -> int:
maxBitPosition = 24
maxCount = 0
for bitPosition in range(maxBitPosition):
currentBitCount = 0
for candidate in candidates:
if (candidate >> bitPosition) & 1:
currentBitCount += 1
maxCount = max(maxCount, currentBitCount)
return maxCount
Time Complexity
- Outer Loop over Bit Positions:
The outer loop iterates over
maxBitPosition, which is a constant value (24). This part of the function has \( O(1) \) complexity, as it doesn’t depend on the size of the input. - Inner Loop over Candidates:
For each bit position, the inner loop iterates over all
candidates(size \( N \)). Checking the specific bit of each candidate takes \( O(1) \) time, so the inner loop is \( O(N) \). - Overall Time Complexity:
The time complexity is \( O(N) \), as the outer loop is constant and the inner loop iterates \( N \) times for each bit position.
Space Complexity
- Auxiliary Variables:
The function uses a fixed number of variables (e.g.,
maxCountandcurrentBitCount), all of which have \( O(1) \) space complexity. - Overall Space Complexity:
The overall space complexity is \( O(1) \), as only a fixed amount of extra space is required regardless of the input size.