Largest Combination With Bitwise AND Greater Than Zero

Updated on 05 June, 2025
Largest Combination With Bitwise AND Greater Than Zero header image

Problem Statement

In the realm of binary arithmetic, the bitwise AND operation is a fundamental operation where two bits are compared, and the result is 1 only if both bits are 1, otherwise it is 0. When applied to a sequence of numbers, bitwise AND evaluates to 1 at each bit position where all the numbers in sequence also have 1 at the same bit position.

Given the context, you are tasked with an interesting challenge involving an array of positive integers named candidates. Your role is to compute the bitwise AND for all possible combinations of elements within the candidates array. Specifically, you need to determine the size of the largest combination where the resulting bitwise AND is greater than zero.

Illustrated with an example:

  • For a set of numbers like candidates = [1, 5, 3], calculating the bitwise AND for all possible combinations, we would identify which combination yields the highest count of numbers while maintaining a non-zero result of the bitwise AND operation.
  • The operation essentially filters down combinations based on their collective binary characteristics, focusing on finding the maximum grouping where all combined numbers share at least one common binary 1.

This leads us to return the count of elements in the largest valid grouping, where "valid" means their bitwise AND does result in a value greater than zero.

Examples

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

Approach and Intuition

Understanding how the bitwise AND operation impacts the combination plays a crucial role in solving this problem. The challenge boils down to identifying the largest subset of the candidates array wherein the bitwise AND of its elements results in a value greater than zero. Here's a step-by-step insight into approaching the task:

  1. Categorize bits positions:

    • Track which bit positions (0 through up to 30 for integers within the provided constraints) are commonly set to 1 across different elements.
    • This is done by looking at each bit position individually and counting its appearance across all elements in terms of it being set (1).
  2. Optimize by most common bits:

    • Determine combinations starting from the most common bits, as these bits that are more frequently set across the array elements will be more likely to achieve a bitwise AND greater than zero in larger groups.
  3. Calculate the size of largest combination for each significant bit:

    • For each possible bit (starting from the most significant to the least), group all numbers having that bit set.
  4. Determine the maximum size:

    • The size of the largest group formed around a significant 1 bit gives the answer. This is because members of such a group, when ANDed together, will naturally yield a result with at least that one 1 bit set, thus greater than zero.

The result derived from the above steps offers not just the solution but insight into how binary operations can determine and influence number groupings based on shared bit characteristics. This process taps deeply into binary arithmetic principles, specifically looking at communalities and variations across the digital spectrum of given numbers.

Solutions

  • C++
  • Java
  • Python
cpp
class Solution {
public:
    int maxSetBits(vector<int>& nums) {
        int highestBitCount = 0;
        for (int i = 0; i < 24; ++i) {
            int bitCount = 0;
            for (int number : nums) {
                if (number & (1 << i)) {
                    bitCount++;
                }
            }
            highestBitCount = max(highestBitCount, bitCount);
        }
        return highestBitCount;
    }
};

The solution involves finding the largest subset of numbers from a given vector such that there exists at least one bit position where the bitwise AND of all numbers in the subset results in a bit value greater than zero. This is accomplished using a C++ function.

  • Start by initializing a variable highestBitCount to zero. This variable tracks the maximum count of numbers that share the same bit position set to 1.
  • Iterate through each bit position from 0 to 23, inclusive (considering numbers can have up to 24 significant bits for the purpose).
  • For each bit position, initialize bitCount to count how many numbers have the current bit set to 1.
  • Using a nested loop, iterate over each number in the input vector.
  • Check if the current bit position in the number is set by using the bitwise AND operation between the number and 1 shifted left by the bit position (1 << i).
  • If true, increment bitCount.
  • After iterating through all numbers for the current bit position, update highestBitCount to be the maximum of its current value or bitCount.
  • Once all bit positions are checked, return the highestBitCount.

This function efficiently counts the number of numbers that can be combined such that the bitwise AND on a specific bit position yields a non-zero result, ensuring the largest subset is identified for any potential bit position.

java
class Solution {

    public int maxBitwiseCombination(int[] numbers) {
        int highestCount = 0; 
        for (int i = 0; i < 24; i++) {
            int bitCount = 0; 
            for (int value : numbers) {
                if ((value & (1 << i)) > 0) {
                    bitCount++;
                }
            }
            highestCount = Math.max(highestCount, bitCount); 
        }
        return highestCount;
    }
}

The provided Java solution determines the largest number of elements from an integer array that, when evaluated using bitwise AND operation with a power of two, results in a value greater than zero. This process is used to find which power of two (from 0 to 23) captures the most numbers from the array with non-zero results when the power is used as a mask in the AND operation.

  • Start by initializing highestCount to zero. This variable will keep track of the maximum count of non-zero results across all bit positions.
  • Iterate through bit positions from 0 to 23 using a loop. This represents each bit position to test in the numbers.
    • For each bit position (i), initiate bitCount to zero. This counter will tally how many numbers in the array have the ith bit set.
    • For each number in the input array, check if the ith bit is set by performing a bitwise AND between the number and 1 << i (which is 2 raised to the power i). If the result is greater than zero, increment bitCount.
    • Update highestCount to be the maximum value between the current highestCount and the bitCount for the current bit position. This ensures that after all bits are checked, highestCount holds the maximum number of integers that had non-zero results for any bit position.
  • Return highestCount as the final result, which is the largest count of numbers from the array that, for any single bit, results in a non-zero outcome when applying the bitwise AND operation with powers of two.
python
class Solution:
    def findMaxCombination(self, numbers):
        max_bit_count = 0
        for position in range(24):
            bit_count = 0
            for value in numbers:
                if (value & (1 << position)) > 0:
                    bit_count += 1
            max_bit_count = max(max_bit_count, bit_count)
        return max_bit_count

The provided Python code defines a method findMaxCombination within a class Solution to solve the problem of finding the largest combination of numbers where the bitwise AND operation results in a value greater than zero. It operates as follows:

  • Initialize a variable max_bit_count to store the maximum number of elements that contribute positively to the bitwise AND for any bit position.
  • Iterate through each bit position from 0 to 23 (covering potential bit positions for up to 24-bit integers):
    • For each position, initialize a bit_count counter to zero.
    • Loop through all numbers in the provided list and use bitwise AND to check if the bit at the current position is set (i.e., not zero).
    • If the condition is true, increment the bit_count for the current bit position.
    • Update max_bit_count if the current bit_count is greater than the previously recorded maximum.
  • The function finally returns the value of max_bit_count, which represents the maximum group of numbers that have at least one bit position in common when AND-ed together, resulting in a non-zero output.

Comments

No comments yet.