兩個整數的 漢明距離 指的是這兩個數字的二進制數對應位不同的數量。
計算一個數組中,任意兩個數之間漢明距離的總和。
示例:
輸入: 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位進行計算,因爲不同位之間不會相互影響,比雙重循環整體判斷更快