leetcode 477. 汉明距离总和 击败97.79%

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。

计算一个数组中,任意两个数之间汉明距离的总和。

示例:

输入: 4, 14, 2

输出: 6

解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14,
2) = 2 + 2 + 2 = 6. 注意:

数组中元素的范围为从 0到 10^9。 数组的长度不超过 10^4。

 public int totalHammingDistance(int[] nums) {
       if (nums.length < 2) {
            return 0;
        }
        int sum = 0;
        //范围小于2的30次方,所以只需要对后30位计算
        int count = 30;
       while (count-- > 0) {
       //逐位进行计算
            int ones = 0;
            for (int i = 0; i < nums.length; i++) {
            //判断整个数组在该位上有多少个1
                ones+=(nums[i] & 1);
                nums[i] >>= 1;
            }
            //在这一位上的距离总和是出现1的次数*出现0的次数
            sum += ones * (nums.length - ones);
        }

        return sum;
    }

整个思想就是对整个数组元素,每次对其中1位进行计算,因为不同位之间不会相互影响,比双重循环整体判断更快

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章