您的位置:首页 > 其它

leetcode-Total Hamming Distance

2017-07-06 18:36 495 查看
先看题意:
Input: 4,14, 2
 
Output: 6
 
Explanation:In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showingthe four bits relevant in this case). So the answer will be:
HammingDistance(4,14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
 
计算总的hamming距离,根据tips发现规律
0100
1110
0010
两两组合,竖着看,每一列带来的海明距离是(1的个数)*(0的个数)

确定好思路之后,接下来就是写代码了

 
一开始想的方法也是够笨,直接超时了,用的python
class Solution(object):
def totalHammingDistance(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
total=len(nums)
n=0
count=0
while n<total:
j=n+1
while j<total:
count+= bin(nums
^nums[j]).count('1')
j+=1
n+=1
return count

差评

接下来换了换思路
public class Solution {
public int totalHammingDistance(int[] nums) {
int n = nums.length;
int total = 0;
for(int i=0;i<32;i++){
int count = 0;
for(int j=0;j<n;j++){
if((nums[j]&1) ==1){
count +=1;
}
nums[j] >>= 1;
}
total += count*(n-count);
}
return total;
}
}


移位操作和累加操作下面这个更简洁些:
public int totalHammingDistance(int[] nums) {
int total = 0;
int n = nums.length;
for (int i=0;i<32;i++){
int counter = 0;
for ( int j=0;j<n;j++){
counter += (nums[j] >> i) & 0x01;
}
total += counter*(n - counter);
}
return total;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: