2044. Count Number of Maximum Bitwise-OR Subsets - Detailed Explanation

Free Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog. Take a step towards a better tech career now!

Problem Statement

You are given an array of positive integers, nums. A subset of nums is any set that can be formed by deleting some (or none) of the elements. The bitwise OR of a subset is defined as the OR of all the numbers in that subset. Your task is to determine:

  1. The maximum bitwise OR value that can be obtained from any non-empty subset of nums.
  2. The number of subsets that achieve this maximum bitwise OR value.

Return the count of such subsets.

Example Inputs & Outputs

  • Example 1:

    • Input: nums = [3, 1]
    • Output: 2
    • Explanation:
      The possible non-empty subsets are:
      • Subset [3] has OR = 3.
      • Subset [1] has OR = 1.
      • Subset [3, 1] has OR = 3 OR 1 = 3.
        The maximum bitwise OR value is 3, and there are 2 subsets that achieve this (i.e. [3] and [3, 1]).
  • Example 2:

    • Input: nums = [2, 2, 2]
    • Output: 7
    • Explanation:
      Every non-empty subset will have OR = 2. There are (2^3 - 1 = 7) non-empty subsets, and all yield the maximum OR value 2.
  • Example 3:

    • Input: nums = [3, 2, 1, 5]
    • Output: For instance, if the maximum OR is computed to be 7, count all subsets that OR to 7.
      (A detailed explanation of the subsets can be performed in a similar manner.)

Constraints

  • (1 \leq \text{nums.length} \leq 16)
  • (1 \leq \text{nums}[i] \leq 10^5)
  • All numbers are positive integers.

Hints

  1. Determine the Maximum OR Value:
    First, compute the OR of all numbers in the array. This value is the highest possible OR you can obtain from any subset because OR is a monotonically increasing operation when you add more bits.

  2. Enumerate Subsets:
    Since the maximum number of elements is small (up to 16), you can afford to enumerate all non-empty subsets (using either bit manipulation or recursion) and count those whose OR equals the maximum OR.

  3. Efficient Backtracking:
    Instead of iterating over every subset explicitly, consider using a backtracking (DFS) approach that accumulates the OR value as you choose to include or exclude elements.

Approach 1: Brute Force (Subset Enumeration)

Step-by-Step Walkthrough

  1. Calculate Maximum OR:

    • Iterate over nums and compute the OR of all elements. This is the target value you want each subset to match.
  2. Enumerate All Subsets:

    • There are (2^n - 1) non-empty subsets for an array of length (n).
    • For each subset, calculate its OR value.
  3. Count Matching Subsets:

    • Compare the computed OR of each subset with the maximum OR.
    • Increment your counter if they match.
  4. Return the Count.

Visual Example (Example 1: [3, 1])

  • Step 1:
    Maximum OR = (3 ,|; 1 = 3).

  • Step 2:
    Enumerate subsets:

    • Subset {3} → OR = 3
    • Subset {1} → OR = 1
    • Subset {3, 1} → OR = (3 ,|; 1 = 3)
  • Step 3:
    Two subsets produce the maximum OR (3): {3} and {3, 1}.

Approach 2: Backtracking / DFS

Step-by-Step Walkthrough

  1. Recursive Function:
    Write a DFS function that, given an index and a current OR value, makes two recursive calls: one including the current number and one excluding it.

  2. Base Case:
    When you reach the end of the array, check if the current OR equals the maximum OR value computed earlier. If yes, count this subset.

  3. Global Counter:
    Use a counter (or pass the count via return values) to sum up the valid subsets.

Visual Example (Using [3, 1])

  • Call DFS with index = 0, current OR = 0.
    • Include 3:
      Update OR → (0 ,|; 3 = 3).
      Call DFS with index = 1.
      • Include 1:
        Update OR → (3 ,|; 1 = 3). → Valid subset.
      • Exclude 1:
        OR remains 3 → Valid subset.
    • Exclude 3:
      OR remains 0.
      Call DFS with index = 1.
      • Include 1:
        Update OR → (0 ,|; 1 = 1). → Not valid.
      • Exclude 1:
        OR remains 0 (empty subset, skip if considering only non-empty subsets).

Code Examples

Python Code

Python3
Python3

. . . .

Java Code

Java
Java

. . . .

Complexity Analysis

  • Time Complexity:

    • There are (2^n) possible subsets, and for each subset the OR is computed cumulatively in the DFS process.
    • Therefore, the overall time complexity is (O(2^n)), where (n) is the length of nums.
    • Given the constraint (n \leq 16), this is feasible.
  • Space Complexity:

    • The recursion depth is (O(n)), and additional space is used for function call stacks.
    • Thus, the space complexity is (O(n)).

Common Mistakes & Edge Cases

Common Mistakes

  • Counting the Empty Subset:
    Ensure that you only count non-empty subsets. In our DFS, we start with an initial OR of 0 and count only when the index reaches the end. (The empty subset is naturally excluded if it does not meet the maximum OR.)

  • Incorrect Maximum OR Calculation:
    Forgetting to compute the maximum OR from all elements can lead to an incorrect target value.

  • Overlapping Recursion Paths:
    Be cautious with recursion to ensure that both include and exclude options are correctly explored.

Edge Cases

  • Single Element Array:
    The maximum OR is the element itself, and the only valid non-empty subset is the array itself.

  • All Elements the Same:
    Every non-empty subset will yield the same OR value. The number of valid subsets will be (2^n - 1).

Variations

  • Counting Subsets with a Specific OR Value:
    Instead of the maximum OR, you might be asked to count the subsets that yield a given target OR value.

  • Subset Sum and Other Bitwise Problems:
    Similar techniques apply when counting subsets for sum problems or for other bitwise operations like AND or XOR.

  • Subset Sum:
    Given an array and a target sum, count or list the subsets that sum to that target.

  • Combination Sum:
    Find all unique combinations that sum up to a target value.

  • Bitwise Operations in Subsets:
    Practice problems that involve bitwise AND, XOR, etc., on subsets.

TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-

GET YOUR FREE

Coding Questions Catalog

Design Gurus Newsletter - Latest from our Blog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
What is the primary key in SQL?
Is Tesla internship hard?
430. Flatten a Multilevel Doubly Linked List - Detailed Explanation
Learn to solve Leetcode 430. Flatten a Multilevel Doubly Linked List with multiple approaches.
Related Courses
Image
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
Image
Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
Image
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
Image
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.
;