Bit manipulation

Use binary representation and bitwise operators for compact state and fast operations. SDE-3: masking, subset enumeration, XOR properties, and bitmask DP (N ≤ 20).


1. Concept Overview

Problem space: Single number (XOR), power of 2, count set bits, subset generation (bitmask), bitmask DP (TSP, partition), XOR trie (max XOR pair), low-level optimizations.

When to use: "Unique number" in duplicates → XOR. "All subsets" with small n → iterate mask 0 to 2^n-1. "State as set" with n≤20 → bitmask DP. "Max XOR" → binary trie.


2. Core Operators & Tricks

  • AND &: Mask/clear bits. n & 1 = last bit (even/odd). n & (n-1) clears lowest set bit (count bits, power of 2).

  • OR |: Set bits. n | (1<<k) set k-th bit.

  • XOR ^: Toggle; a^a=0, a^0=a. Unique in pairs → XOR all.

  • Left/Right shift: << k = *2^k; >> k = /2^k (unsigned).

  • Power of 2: n > 0 && (n & (n-1)) == 0.

  • Count set bits: While n: n &= n-1, count++. Or popcount (built-in in many languages).


3. Advanced Variations

  • Subsets via bitmask: For n elements, for mask in 0..2^n-1: element i included if (mask >> i) & 1. O(2^n).

  • Bitmask DP: State = mask (visited set); e.g., TSP dp[mask][i] = min cost to visit mask ending at i. Transition: try unvisited j. O(2^n * n^2).

  • Single Number II: Count bits mod 3 per position; result = bits that are 1 mod 3. Or state machine (ones, twos).

  • Max XOR of two numbers: Binary trie (each number as 31-bit); for each number traverse trie preferring opposite bit; update max XOR.

Edge Cases

  • Negative numbers (signed right shift); overflow in left shift; 0 (power of 2 false); empty array (single number).


4. Common Interview Problems

Easy: Number of 1 Bits, Power of Two, Missing Number (XOR), Single Number. Medium: Bitwise AND of Numbers Range, Subsets (bitmask), Single Number II/III, Maximum XOR of Two Numbers. Hard: Min Time to Finish All Jobs (bitmask DP), N-Queens (bitmask for columns/diagonals).


5. Pattern Recognition

  • XOR: Pairs cancel; single number; XOR of two numbers (a^b with a,b from two groups).

  • Bitmask: Subset (include/exclude per bit); state = set of indices → integer mask.

  • Bitmask DP: TSP, partition to K subsets, "assign N items with constraints" when N small.

  • Trie: Max XOR = trie with opposite-bit preference.


6. Code Implementations


7. SDE-3 Level Thinking

  • Trade-offs: Bitmask for small n (cache-friendly, one integer); for large n use set or recursive backtracking. XOR for constant space "unique" problems.

  • Memory: Bitmask O(1) for state; bitmask DP O(2^n * ...) — only feasible for n ≤ ~20.


8. Interview Strategy

  • Identify: "Unique" / "pairs" → XOR. "All subsets" / "assign N items" with N small → bitmask. "Max XOR" → trie.

  • Common mistakes: Signed vs unsigned right shift; 1<= word size; forgetting to handle 0.


9. Quick Revision

  • Formulas: Clear lowest bit: n & (n-1). Set k-th: n | (1<<k). Check k-th: (n >> k) & 1.

  • Tricks: XOR all for single number; mask loop for subsets; bitmask DP for TSP/partition.

  • Edge cases: Negative; zero; k out of range.

  • Pattern tip: "State as set" + small N → bitmask DP.

Last updated