Magicsheet logo

Maximum Number That Makes Result of Bitwise AND Zero

Medium
62.5%
Updated 8/1/2025

Asked by 1 Company

Maximum Number That Makes Result of Bitwise AND Zero

What is this problem about?

The Maximum Number That Makes Result of Bitwise AND Zero coding problem is likely asking to find a specific number X such that when X is bitwise ANDed with all elements of a given array nums, the result is 0, and X is maximized. This problem usually implies that X must also be within a certain range (e.g., [0, some_max_val]).

Why is this asked in interviews?

Salesforce uses this problem to test a candidate's understanding of bitwise operations, particularly the bitwise AND, and how to construct a number with specific bit patterns. It often involves a greedy approach or an iterative construction of the target number X from most significant bit to least significant bit.

Algorithmic pattern used

Bitwise Greedy Construction: We want to maximize X such that for all num in nums, (num & X) == 0. This means that if the k-th bit is set in X, then the k-th bit cannot be set in any num in nums. In other words, if any number in nums has its k-th bit set, then the k-th bit in X must be 0. If no number in nums has its k-th bit set, then we can set the k-th bit in X to 1 to maximize X.

The condition (num & X) == 0 for all num in nums is equivalent to X & (nums[0] | nums[1] | ... | nums[N-1]) == 0. Let OR_ALL_NUMS = nums[0] | nums[1] | ... | nums[N-1]. We need to find the maximum X such that X & OR_ALL_NUMS == 0.

To maximize X, we want to set as many bits as possible in X. If the b-th bit is set in OR_ALL_NUMS, then the b-th bit must be 0 in X. If the b-th bit is 0 in OR_ALL_NUMS, then the b-th bit can be 1 in X. To maximize X, we should set it to 1. Therefore, X should have a '1' in every bit position where OR_ALL_NUMS has a '0', and a '0' in every bit position where OR_ALL_NUMS has a '1'. This is precisely the bitwise NOT (~) of OR_ALL_NUMS.

The result X would be ~OR_ALL_NUMS, but we usually need to consider the practical maximum bit length (e.g., 31 for standard signed integers, 32 for unsigned). So, X = (~OR_ALL_NUMS) & MAX_BIT_MASK. A simpler way to phrase X for positive integers is to identify which bits are never set across all numbers. These are the bits we can set in X.

Algorithm:

  1. Initialize OR_ALL_NUMS = 0.
  2. Iterate through each num in nums: OR_ALL_NUMS |= num.
  3. Determine the maximum possible bit position max_bit_pos (e.g., 30 for 32-bit signed int).
  4. Initialize result_X = 0.
  5. Iterate from b = max_bit_pos down to 0: If the b-th bit of OR_ALL_NUMS is 0 (i.e., ((OR_ALL_NUMS >> b) & 1) == 0): Then set the b-th bit of result_X to 1: result_X |= (1 << b).
  6. Return result_X.

Example explanation

nums = [6, 11] Binary representations (assuming 4 bits for illustration): 6 = 0110 11 = 1011

  1. OR_ALL_NUMS = 6 | 11 = 0110 | 1011 = 1111 (binary) = 15 (decimal).
  2. max_bit_pos = 3.
  3. result_X = 0.

Iterate bits from 3 down to 0:

  • Bit 3: ((15 >> 3) & 1) is 1. So, bit 3 of result_X is 0.
  • Bit 2: ((15 >> 2) & 1) is 1. So, bit 2 of result_X is 0.
  • Bit 1: ((15 >> 1) & 1) is 1. So, bit 1 of result_X is 0.
  • Bit 0: ((15 >> 0) & 1) is 1. So, bit 0 of result_X is 0.

result_X = 0000 (binary) = 0 (decimal).

Example 2: nums = [7], max_bit_pos = 3. 7 = 0111

  1. OR_ALL_NUMS = 7.
  2. result_X = 0.

Iterate bits from 3 down to 0:

  • Bit 3: ((7 >> 3) & 1) is 0. So, set bit 3 of result_X: result_X = 1000 (binary) = 8.
  • Bit 2: ((7 >> 2) & 1) is 1. So, bit 2 of result_X is 0.
  • Bit 1: ((7 >> 1) & 1) is 1. So, bit 1 of result_X is 0.
  • Bit 0: ((7 >> 0) & 1) is 1. So, bit 0 of result_X is 0.

result_X = 1000 (binary) = 8 (decimal). Check: 8 & 7 = 0. This is correct.

Common mistakes candidates make

  • Misinterpreting "bitwise AND zero": Confusing it with X ^ num == 0 or other bitwise operations.
  • Incorrectly handling bit manipulation: Off-by-one errors in bit shifts or masks.
  • Not considering the range of X: Whether X has a specific upper bound or is simply maximized within integer limits (handled by max_bit_pos).

Interview preparation tip

For the Sorting String Greedy (or Math Bit Manipulation Greedy) interview pattern, problems involving bitwise operations often require iterating through bits from MSB to LSB (greedy construction) or analyzing the aggregate bit pattern (like OR_of_all_nums). Practice bit manipulation techniques.

Similar Questions