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位進行計算,因爲不同位之間不會相互影響,比雙重循環整體判斷更快

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