461. Hamming Distance and 477. Total Hamming Distance in Python
题目:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
Example:
Input: 4, 14, 2
Output: 6
Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showing the four bits relevant in this case). So the answer will be:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
Note:
- Elements of the given array are in the range of
0to10^9 - Length of the array will not exceed
10^4
代码:
这两周比较慢,都没有做题,赶紧做两道。这两个题目比较像,就放在一起吧。汉明距离,就是把数字变成二进制,看有多少为不一样,不一样的个数就是汉明距离。
所以,第一题,仅仅比较两个数字,我就用了常人都能想到的方法,转换成二进制字符串,遍历比较。唯一注意的就是将较短的字符串前面加0补足和长的相同位数。
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
str1 = bin(x)[2:]
str2 = bin(y)[2:]
if len(str1) < len(str2):
str1 = ''*(abs(len(str2)-len(str1)))+str1
else:
str2 = '' * (abs(len(str2) - len(str1))) + str2 res = 0
for i in range(0,len(str1)):
if not str1[i:i+1] == str2[i:i+1]:
res += 1
return res
这个题通过了,但第二个题目要求给出一个字符串,两两求出汉明距离,然后相加。于是,我接着上题的函数,增加了一个遍历,O(n^2):
def totalHammingDistance(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
res = 0
new_nums = sorted(nums)
print sorted(set(nums))
for i in range(len(new_nums)):
for j in new_nums[i+1:]:
print new_nums[i],j
print self.hammingDistance(new_nums[i],j)
res += self.hammingDistance(new_nums[i],j)
return res
逻辑是没错,但不用想,leetcode中当然超时,会有一个包含1000个7、8位数字的列表去测试。唉,没办法,想不出来,百度了一下。这个汉明距离,其实可以通过每个bit位上面数字0的个数和1的个数相乘的结果,相加求得。等于逐一遍历列表中每个数字的每个bit位,所有bit位遍历一遍。
def totalHammingDistance2(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
res = 0
lists = []
nums.sort()
for i in nums:
temp = list(bin(i)[2:])
temp.reverse()
lists.append(temp) for i in range(len(lists[-1])):
count_0, count_1 = 0, 0
for element in lists:
# print element
if len(element)-1 < i:
count_0 += 1
elif element[i] == '':
count_0 += 1
elif element[i] == '':
count_1 += 1
# print count_0,count_1
res += count_0 * count_1
return res
试了下,果然没问题!:)
461. Hamming Distance and 477. Total Hamming Distance in Python的更多相关文章
- [LeetCode] 477. Total Hamming Distance 全部汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- 477. Total Hamming Distance总的二进制距离
[抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...
- [LeetCode] 477. Total Hamming Distance(位操作)
传送门 Description The Hamming distance between two integers is the number of positions at which the co ...
- 【LeetCode】477. Total Hamming Distance 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 位运算 日期 题目地址:https://leetco ...
- 461. Hamming Distance + 477. Total Hamming Distance
▶ 与 Hamming 距离相关的两道题. ▶ 461. 求两个数 x 与 y 的哈夫曼距离. ● 代码,4 ms,对 x 和 y 使用异或,然后求值为 1 的位的个数. class Solutio ...
- LeetCode "477. Total Hamming Distance"
Fun one.. the punch line of this problem is quite common in Bit related problems on HackerRank - vis ...
- 477. Total Hamming Distance
class Solution { public: int totalHammingDistance(vector<int>& nums) { ; ; i < ; i++) { ...
- 477 Total Hamming Distance 汉明距离总和
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量.计算一个数组中,任意两个数之间汉明距离的总和.示例:输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表 ...
- [LeetCode] Total Hamming Distance 全部汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
随机推荐
- UVA232
这只是大概的雏形. 步骤就是:1输入网格,2给网格里的起始格编序号,3输出所有字母,前面要加序号 #include<stdio.h> #include<ctype.h> #in ...
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码
在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...
- apache配置 php中没有php5apache2_4.dll
apache配置 php中没有php5apache2_4.dll 今天,在win7系统下安装Apache+PHP+MySQL时,终于体会到了版本多也不一定是好事,各种不兼容,主要是因为动态包的多少问题 ...
- [Asp.net mvc]OutputCacheAttribute
什么是Cache? 缓存在web应用中是一种以空间换去时间的技术,把频繁访问并且不经常变化的数据存储到内存中,以达到快速访问的目的.在web应用中是比较常见的优化方式. OutputCacheAttr ...
- controller_name classify constantize model_name
控制器 class CourseSurveysController < ResourcesBaseController end controller_name # "course_su ...
- 11i和R12配置JAR包
R11:$IAS_ORACLE_HOME/Apache/Jserv/etc/jserv.properties R12: 方法1:直接解压JAR包放到$JAVA_TOP下: 方法2:编辑:$ORA_CO ...
- 数据库操作,jdbc的CRUD
用Java代码操作数据库,可以用JDBC.首先要加载驱动,之后建立连接,再然后就可以对数据库进行操作. 1.建立连接.此处用的是MySQL数据库 public class DBUtil { publi ...
- js基础总结
DOM 节点 document节点 nodeType:9 文本节点 nodeType:3 元素节点 nodeType:1 注释节点 nodeType:8 属性节点 nodeType:2 at ...
- BZOJ 2081: [Poi2010]Beads
Description 问把n截成每个长度后不同子串个数. Sol 调和极数+Hash. 首先这是一个式子 \(n\sum_{i=1}^n \frac {1}{i}\) . 这东西就是调和极数再乘上 ...