Total Hamming Distance leetCode
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given an integer array nums, return the sum of Hamming distances between all the pairs of the integers in nums.
Example 1:
Input: nums = [4,14,2]
Output: 6
Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showing the four bits relevant in this case).
The answer will be:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
Example 2:
Input: nums = [4,14,4]
Output: 4
Approach 1 : -Brute Force (issue in brute force is Time Limit Exceeded problem
class Solution {
public int totalHammingDistance(int[] nums) {
int distnace=0;
for(int i=0;i<nums.length;i++)
{
for(int j=i+1;j<nums.length;j++)
{
distnace +=hamiltondistance(nums[i],nums[j]);
}
}
return distnace;
}
public int hamiltondistance(int x,int y)
{
int count=0;
int xor=x ^ y;
int mask=1;
for(int i=0;i<32;i++)
{
if((mask & xor) !=0)
{
count++;
}
mask <<=1;
}
return count;
}
}
Approach 2: Optimized Solution
class Solution {
public int totalHammingDistance(int[] nums) {
int total = 0;
int n = nums.length;
for (int i = 0; i < 32; i++) {
int countOnes = 0;
for (int num : nums) {
// Count how many numbers have 1 at the ith bit
countOnes += (num >> i) & 1;
}
int countZeros = n - countOnes;
total += countOnes * countZeros;
}
return total;
}
}
Comments
Post a Comment