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

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence