面试训练二进制中1的个数
2012-09-07 22:46
162 查看
海涛的思路相当犀利
比如 1100 包含1的个数
先减-1 的1011 没改变高位的1 只改变地位 ,1100&1011 ---》1000刚好去除了最右边低位的1.
那么简单方面可以直接写出来
int data(int n)
{
int num=0;
while(n)
{
num++;
n = (n-1)&n;
}
return num;
}
这种题目的变种
两个整数m和n,求改变m二进制中多少位才能得到n
这种问题分两步走
1 两个求异或,目的就是求出m和n相比不同的1的个数
然后计算机异或后中含有的1的个数。
比如 1100 包含1的个数
先减-1 的1011 没改变高位的1 只改变地位 ,1100&1011 ---》1000刚好去除了最右边低位的1.
那么简单方面可以直接写出来
int data(int n)
{
int num=0;
while(n)
{
num++;
n = (n-1)&n;
}
return num;
}
这种题目的变种
两个整数m和n,求改变m二进制中多少位才能得到n
这种问题分两步走
1 两个求异或,目的就是求出m和n相比不同的1的个数
然后计算机异或后中含有的1的个数。
相关文章推荐
- 面试训练八皇后问题
- 面试训练数组中出现次数超过一半的数字
- 面试训练旋转数组的最小元素
- 面试训练排序二叉树
- 面试训练把数组排成最小的数
- 面试训练圆圈中最后剩下的数
- 【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
- 面试训练不用+、-、×、÷做加法
- 面试训练丑数
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- 位运算训练04—输入一个整数a,再输入两个整数p(p<32),v(0|1);将该整数a的p位设置为v,输出修改后的该整数的二进制表示
- 面试训练海涛54题
- 面试训练树的子结构
- 面试训练对称子字符串的最大长度
- 面试训练二维数组
- 面试训练二叉树问题二
- 面试训练调整平衡二叉树
- 二进制与三进制在it笔试面试中的妙用
- 面试训练O(n)时间的排序
- 面试训练链表问题