Maximum Hamming Distances - Solution & Explanation
Problem Statement
Given an array nums and an integer m, with each element nums[i] satisfying 0 <= nums[i] < 2m, return an array answer. The answer array should be of the same length as nums, where each element answer[i] represents the maximum Hamming distance between nums[i] and any other element nums[j] in the array.
The Hamming distance between two binary integers is defined as the number of positions at which the corresponding bits differ (add leading zeroes if needed).
Example 1:
Input: nums = [9,12,9,11], m = 4
Output: [2,3,2,3]
Explanation:
The binary representation of nums = [1001,1100,1001,1011].
The maximum hamming distances for each index are:
nums[0]: 1001 and 1100 have a distance of 2.nums[1]: 1100 and 1011 have a distance of 3.nums[2]: 1001 and 1100 have a distance of 2.nums[3]: 1011 and 1100 have a distance of 3.
Example 2:
Input: nums = [3,4,6,10], m = 4
Output: [3,3,2,3]
Explanation:
The binary representation of nums = [0011,0100,0110,1010].
The maximum hamming distances for each index are:
nums[0]: 0011 and 0100 have a distance of 3.nums[1]: 0100 and 0011 have a distance of 3.nums[2]: 0110 and 1010 have a distance of 2.nums[3]: 1010 and 0100 have a distance of 3.
Constraints:
1 <= m <= 172 <= nums.length <= 2m0 <= nums[i] < 2m
Approach Overview
Problem Overview: Given an array of integers where each value fits within m bits, compute the maximum Hamming distance between each number and any other number in the array. The Hamming distance counts how many bit positions differ between two numbers.
Approach 1: Pairwise Comparison (Brute Force) (Time: O(n^2 * m), Space: O(1))
The most direct method checks every pair of numbers and computes their Hamming distance using popcount(a ^ b). Iterate through the array, compare each element with all others, and track the maximum distance for each index. This approach is easy to implement and demonstrates the definition of Hamming distance clearly. However, the nested iteration makes it impractical for large arrays because every pair is evaluated explicitly. It works only when n is small.
Approach 2: Reverse Thinking + Multi-Source BFS on Bitmasks (Time: O(m * 2^m), Space: O(2^m))
The optimized solution treats every possible m-bit number as a node in a hypercube graph. Two nodes are connected if their bitmasks differ by exactly one bit. Instead of searching for the farthest number directly, reverse the thinking: compute the minimum Hamming distance from every bitmask to the closest value in the array. Initialize a multi-source BFS from all numbers in nums with distance 0. From each mask, generate neighbors by flipping one bit (mask ^ (1 << bit)) and propagate distances. This BFS effectively fills the entire 2^m state space.
To obtain the maximum Hamming distance for a number x, use its bitwise complement within the m-bit space: target = mask ^ x where mask = (1 << m) - 1. The BFS already computed the minimum distance from target to any number in the array. Because Hamming(x, y) = m - Hamming(~x, y), the answer becomes m - dist[target]. This trick converts a "maximum distance" problem into a "minimum distance" search over the bitmask graph.
The approach relies heavily on efficient bit operations and a queue-based traversal similar to standard Breadth-First Search. Each state flips one bit using Bit Manipulation, and the input values come from an Array. Because the total state space is bounded by 2^m, the BFS remains feasible when m is small (commonly ≤ 17).
Recommended for interviews: The brute force approach demonstrates understanding of Hamming distance using XOR and popcount, but interviewers expect the reverse-thinking BFS optimization. Recognizing the hypercube structure and converting a maximum-distance query into a minimum-distance BFS shows strong problem-solving skills with bitmasks and graph traversal.
Solution
The problem requires us to find the maximum Hamming distance between each element and other elements in the array. We can think in reverse: for each element, we take its complement and find the minimum Hamming distance to other elements in the array. Then, the maximum Hamming distance we are looking for is m minus this minimum Hamming distance.
We can use Breadth-First Search (BFS) to find the minimum Hamming distance from each complemented element to other elements.
The specific steps are as follows:
- Initialize an array
distwith a length of2^mto record the minimum Hamming distance from each complemented element to other elements. Initially, all are set to-1. - Traverse the array
nums, set the complement of each element to0, and add it to the queueq. - Starting from
k = 1, continuously traverse the queueq. Each time, take out the elements in the queue, performmcomplement operations on them, add the complemented elements to the queuet, and set the minimum Hamming distance to the original element tok. - Repeat step 3 until the queue is empty.
Finally, we traverse the array nums, take the complement of each element as the index, and take out the corresponding minimum Hamming distance from the dist array. Then, m minus this value is the maximum Hamming distance we are looking for.
The time complexity is O(2^m), and the space complexity is O(2^m), where m is the integer given in the problem.
Code
Python
Java
C++
Go
TypeScript
Detailed Complexity Analysis
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Pairwise Comparison (Brute Force) | O(n^2 * m) | O(1) | Small arrays where simplicity matters more than performance |
| Reverse Thinking + Multi-Source BFS | O(m * 2^m) | O(2^m) | General case when bit length is limited and optimal performance is required |
Video Solution
3141. Maximum Hamming Distances (Leetcode Hard) • Programming Live with Larry • 374 views views
Frequently Asked Questions
Is Maximum Hamming Distances easy or hard?
Maximum Hamming Distances Python/Java solution
How to solve Maximum Hamming Distances in O(m * 2^m)?
What is the best approach for Maximum Hamming Distances?
Is Maximum Hamming Distances asked at Google/Amazon/Meta?
What data structure is used in Maximum Hamming Distances?
What is the time complexity of Maximum Hamming Distances?
Ready to solve this problem?
Practice Maximum Hamming Distances with our built-in code editor and test cases.
Practice on FleetCodeProblem Info
Table of Contents
Practice this problem
Open in Editor