theme: healer-readable
題目
兩個整數的 漢明距離 指的是這兩個數字的二進制數對應位不同的數量。
計算一個數組中,任意兩個數之間漢明距離的總和。
示例:
輸入: 4, 14, 2
輸出: 6
解釋: 在二進制表示中,4表示為0100,14表示為1110,2表示為0010。(這樣表示是為了體現后四位之間關系)
所以答案為:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
解題思路
題目分析
例如示例中的4,14,2的漢明距離
在二進制表示中
0100
1110
0010
我們可以垂直的觀察,因為漢明距離指的是兩個數字的二進制數對應位不同的數量,所以我們發現其實元素的每一位都可以獨立出來計算,就是將int類型看成32個0,1表示的二進制數,他們相互獨立,在計算漢明距離時,我們只要將每個元素的第x位提取出來,統計所有元素在該位的0,1的數量,就可以得出在該位上,有多少個不同的二進制數,再把每一位的結果累加起來,就是最終的漢明距離。
代碼
class Solution {public int totalHammingDistance(int[] nums) {int res=0;for(int i=0;i<31;i++){int[] cnt = new int[2];for (int j = 0; j < nums.length; j++) {cnt[nums[j]&1]++;nums[j]>>=1;}res+=cnt[0]*cnt[1];}return res;}
}