477 漢明距離總和(位運算)

2021-10-09 22:23:43 字數 1125 閱讀 7551

1. 問題描述:

兩個整數的漢明距離指的是這兩個數字的二進位制數對應位不同的數量。計算乙個陣列中,任意兩個數之間漢明距離的總和。

示例:

輸入: 4, 14, 2

輸出: 6

解釋: 在二進位制表示中,4表示為0100,14表示為1110,2表示為0010。(這樣表示是為了體現後四位之間關係)

所以答案為:

hammingdistance(4, 14) + hammingdistance(4, 2) + hammingdistance(14, 2) = 2 + 2 + 2 = 6.

注意:

陣列中元素的範圍為從010^9

陣列的長度不超過10^4

2. 思路分析:

分析題目可以知道最容易想到的是使用兩層迴圈列舉當前數字與其餘的兩個數字,計算他們二進位制不同的位數,但是由於陣列的最大長度為10 ^ 4所以兩層迴圈應該會超時的,所以我們不能夠列舉任意兩個數字。這裡可以列舉每一位,將所有數字當前這一位分為兩組,一組是所有數字當前這一位為0的數目x,另外一組是所有數字當前這一位為1的數目y,所以這一位不同二進位制位的數目為x * y,int型別最大是31位,所以列舉31位即可。

3. **如下:

from typing import list

class solution:

def totalhammingdistance(self, nums: list[int]) -> int:

res = 0

# 列舉每一位

for i in range(31):

# 列舉每乙個數字, x表示當前第i位0的數目, y表示當前第i位1的數目

x, y = 0, 0

for j in range(len(nums)):

if nums[j] >> i & 1:

y += 1

else:

x += 1

res += x * y

return res

477 漢明距離總和

兩個整數的 漢明距離 指的是這兩個數字的二進位制數對應位不同的數量。計算乙個陣列中,任意兩個數之間漢明距離的總和。示例 輸入 4,14,2 輸出 6 解釋 在二進位制表示中,4表示為0100,14表示為1110,2表示為0010。這樣表示是為了體現後四位之間關係 所以答案為 hammingdista...

477 漢明距離總和

兩個整數的 漢明距離 指的是這兩個數字的二進位制數對應位不同的數量。計算乙個陣列中,任意兩個數之間漢明距離的總和。示例 輸入 4,14,2 輸出 6 解釋 在二進位制表示中,4表示為0100,14表示為1110,2表示為0010。這樣表示是為了體現後四位之間關係 所以答案為 hammingdista...

漢明距離總和

題目 兩個證書的漢明距離指的是這兩個數字的二進位制數對應值不同的數量。計算乙個陣列中,任意兩個數之間漢明距離的總和。示例 輸入 4,14,2 輸出 6 解釋 在二進位制表示中,4表示為0100,14表示為1110,2表示為0010。這樣表示是為了提現後四位之間的關係 所以答案為 hammingdis...