/*
难度:中等
计算一个数组中,任意两个数之间的汉明距离的总和。
两个整数之间的汉明距离是指这两个数的二进制位不同的位置的数目。
注意:数组的元素范围:[0, 10^9]; 数组的长度不超过10^4
*/
extension Daily {
static func test_leetCode477() {
let x = 1
let y = 4
let result = Daily.leetCode477(x: x, y: y)
print("result: \(result)")
}
//10^9,其二进制位最高位不会超过第29位,以最右为第0位
static let bits = [
0x20000000, 0x10000000,
0x8000000, 0x4000000, 0x2000000, 0x1000000,
0x800000, 0x400000, 0x200000, 0x100000,
0x80000, 0x40000, 0x20000, 0x10000,
0x8000, 0x4000, 0x2000, 0x1000,
0x800, 0x400, 0x200, 0x100,
0x80, 64, 32, 16,
8, 4, 2, 1,
]
static func leetCode477(_ nums: [Int]) -> Int {
var total = 0
var sum = 0
for idx in 0..<bits.count {
for item in nums {
if item & bits[idx] > 0 {
sum += 1
}
}
total += sum*(nums.count - sum)
sum = 0
}
return total
}
}
【LeetCode 477】汉明距离总和
最新推荐文章于 2021-12-30 11:20:02 发布