leetcode 477 汉明距离总和
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 。
示例1
输入:nums = [4,14,2]
输出:6
解释:在二进制表示中,4 表示为 0100 ,14 表示为 1110 ,2表示为 0010 。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6
示例2
输入:nums = [4,14,4]
输出:4
思路
把数组中的每个元素32位的二进制位依次扫一遍,当扫到某一位上的时候,有k个元素在这个位上的值是1,n - k 个元素在这个位置上就是 0,那么在这一位上所有两两元素的海明距离是 k*(n-k),当把 32 位全部扫描完毕后,累加出来的海明距离就是所有两两元素的海明距离。
代码
/**
* @param {number[]} nums
* @return {number}
*/
function totalHammingDistance(nums) {
let total = 0;
let n = nums.length;
for (let i = 0; i < 32; i++) {
let bitCount = 0;
for (let j = 0; j < n; j++) {
bitCount += (nums[j] >> i) & 1;
}
total += bitCount * (n - bitCount);
}
return total;
}
复杂度分析:
- 时间复杂度: O(32^N)
- 空间复杂度:O(1)
FEATURED TAGS
前端开发
H5
JavaScript
设计模式
browser
jQuery
源码分析
生活
leetcode
Array
Stack
Queue
Linked List
剑指offer
Binary Search Tree
Binary Tree
Breadth-First Search
Depth-First Search
String
Set
Binary Search
Sliding Window
Backtracking
Dynamic Programming
Two Pointers
Union Find
Sort
Bit Operation
Recursion
Map
Graph
Search
Hash
LinkedList
复盘
QuickSort
Trie
Design
MinHeap
Traverse
Min Heap
Node.js
BackEnd
SQL
MySQL
Design Patterns
Network
计算机网络
Python
SVG