leetcode算法题1: 两个二进制数有多少位不相同?异或、位移、与运算的主场
/*
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.
*/
int hammingDistance(int x, int y) {
}
题意: 输入两个int,求这两个数的二进制数的不同的位的个数。

办法一:
* 可以利用异或的特性:相同为0,不同为1。把两数异或,再判断结果有几个1。
* 怎么判断int中有几个1?
* 可以对这个数除2运算,并记录模2为1的个数,直至此数变到0。也就是模拟了转二进制数的过程。
办法二:
* 先异或。
* 如何判断有几个1?
* 右移一位,再左移一位,如果不等于原数,就是有一个1。同样模拟了转二进制数的过程。
* 除2即右移一位。
办法三:
* 先异或。
* 如何判断有几个1?
while(n) {
c++;
n=n&(n-1);
}
n&(n-1)就是把n的最未的1变成0。
#include <stdio.h>
int hammingDistance(int x, int y) {
int r = x ^ y;
int cnt = 0;
while (r > 0) {
if (r%2 == 1) {
cnt ++;
}
r = r/2;
}
return cnt;
}
int hammingDistance2(int x, int y) {
int r=x^y;
int cnt = 0;
while (r) {
if ((r>>1)<<1 != r) {
cnt ++;
}
r >>= 1;
}
return cnt;
}
int hammingDistance3(int x, int y) {
int r=x^y;
int cnt=0;
while (r) {
cnt ++;
r=r&(r-1);
}
return cnt;
}
int main(int argc, char *argv[])
{
printf("%d\n", hammingDistance3(1,4));
return 0;
}
leetcode算法题1: 两个二进制数有多少位不相同?异或、位移、与运算的主场的更多相关文章
- LeetCode算法题-Number Complement(Java实现-五种解法)
这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)
这是悦乐书的第311次更新,第332篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762).给定两个正整数L和R,在[L,R]范围内,计算每个整数的 ...
- LeetCode算法题-Binary Number with Alternating Bits(Java实现)
这是悦乐书的第292次更新,第310篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第160题(顺位题号是693).给定正整数,检查它是否具有交替位:即它的二进制数的任意两 ...
- LeetCode算法题-Distribute Candies(Java实现)
这是悦乐书的第266次更新,第279篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第133题(顺位题号是575).给定具有偶数长度的整数数组,其中该数组中的不同数字表示不 ...
- LeetCode算法题-Array Partition I(Java实现)
这是悦乐书的第262次更新,第275篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第129题(顺位题号是561).给定一个2n个整数的数组,你的任务是将这些整数分组为n对 ...
- LeetCode算法题-Hamming Distance(Java实现)
这是悦乐书的第237次更新,第250篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461).两个整数之间的汉明距离是相应位不同的位置数.给定两个整数 ...
- LeetCode算法题-Poor Pigs(Java实现)
这是悦乐书的第235次更新,第248篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455).有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒 ...
随机推荐
- HDU 6113 度度熊的01世界
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Can you solve this equation?
Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its sol ...
- zabbix 2.2.20 安装详解(Centos6.9)
环境说明 [root@centos ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@centos ~]# uname -a L ...
- ruby 正则表达式 匹配规则
- linux mysql无故无法启动了,centos 7
转自: http://support.moonpoint.com/software/database/mysql/not-running-centos7.php 下面简单翻译一下. 详细内容可以阅读英 ...
- dubbo专题」dubbo其实很简单,就是一个远程服务调用的框架(1)
一.dubbo是什么? 1)本质:一个Jar包,一个分布式框架,,一个远程服务调用的分布式框架. 既然是新手教学,肯定很多同学不明白什么是分布式和远程服务调用,为什么要分布式,为什么要远程调用.我简单 ...
- FLP不可能性(FLP impossibility)
FLP不可能性(FLP impossibility) FLP impossibility是一个定理,它证明了在分布式情景下,无论任何算法,即使是只有一个进程挂掉,对于其他非失败进程,都存在着无法达成一 ...
- concurrent.futures
concurrent.futures concurrent.futures提供高层次的接口,用来实现异步调用. 这个异步执行可以使用threads(ThreadPoolExecutor)或者proce ...
- 【转】Linux下软、硬链接的创建和删除
原文:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/05/2199534.html 在Linux系统中,内核为每一个新创建的文件分 ...
- Docker(社区版) centos版 安装
1,总结一下docker的安装,其实官网有很全面的资料了,可以自己上面去看,但都是英文的. https://docs.docker.com/engine/installation/linux/dock ...