477. 汉明距离总和
分类:
位运算 中等
题目:
收获:
- 纵向看待数列
- 开阔思路
代码:
由题目的数字范围可以知道10^9小于2^30,因此我们将数组横向看,可以对于数组中所有元素的每一数位分别进行统计,我们进而能够知道所有排列组合的可能也就是对于每一数位中的1与0中任意选择一个相互结合即为汉明距离,因此如果数位i上1的个数为k,数组总长度为n,那么数位i上的0的个数为(n-k),汉明距离为k(n-k)。
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int count=0;
int n=nums.size();
for(int i=0;i<30;i++){
int tmp=0;
for(int val:nums){
tmp+=(val>>1)&1;
}
count+=tmp*(n-tmp);
}
return count;
}
};
复杂度:
创作不易,点个赞就是对作者最大的鼓励。
搜索公众号:菜鸟阿力
每天都会在公众号分享学习积累,欢迎关注~