All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0401_0500.s0477_total_hamming_distance.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0401_0500.s0477_total_hamming_distance;

// #Medium #Array #Math #Bit_Manipulation #2022_07_20_Time_5_ms_(95.10%)_Space_54.9_MB_(8.69%)

/**
 * 477 - Total Hamming Distance\.
 *
 * Medium
 *
 * The [Hamming distance](https://en.wikipedia.org/wiki/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
 *
 * **Constraints:**
 *
 * *   1 <= nums.length <= 104
 * *   0 <= nums[i] <= 109
 * *   The answer for the given input will fit in a **32-bit** integer.
**/
public class Solution {
    public int totalHammingDistance(int[] nums) {
        int ans = 0;
        int n = nums.length;
        for (int i = 0; i < 32; i++) {
            int ones = 0;
            for (int k : nums) {
                ones += ((k >> i) & 1);
            }
            ans = ans + (ones * (n - ones));
        }
        return ans;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy