腾讯面试中一道算法题:一个数N 的2进制表现形式中1的个数
2014-08-16 17:33
281 查看
这是一个很经典的算法题,方法有很多,这里只写自己会的几个。
通过移位,算法简单易懂,就不做详细讲解了。注意循环次数等于n的位数,若n是32位的,则循环32次。
方法二
算法:
该方法比较巧妙,每次n同n-1进行与运算,即去掉n最低位(即最右边)的1。大家可以自己用笔试一下。例如n=6,二进制为110,5二进制为101。110&101=100,去掉了6最右边的1,然后100&011=000,又去掉一个1。即6的二进制表现形式中1的个数为2。
该方法运算速度快,与1的个数有关,同N的大小无关
方法一 移位
算法:int bitCont(unsigned int n) { int c=0; //1的个数 while(n>0) { c+=n&1; n>>=1; //右移1位,相当于减一 } return c; }
通过移位,算法简单易懂,就不做详细讲解了。注意循环次数等于n的位数,若n是32位的,则循环32次。
方法二
算法:
int bitCount(unsigned int n) { int c=0; //1的个数 while(n>0) { c++; n=n&(n-1); } }
该方法比较巧妙,每次n同n-1进行与运算,即去掉n最低位(即最右边)的1。大家可以自己用笔试一下。例如n=6,二进制为110,5二进制为101。110&101=100,去掉了6最右边的1,然后100&011=000,又去掉一个1。即6的二进制表现形式中1的个数为2。
该方法运算速度快,与1的个数有关,同N的大小无关
相关文章推荐
- 腾讯2015校招面试中一道算法题
- 百度一道关于算法的面试题目
- java 面试中的一道编写一个截取字符串的函数
- C/C++面试之算法系列--怎样快速检测出一个巨大的单链表中是否具备死链及其位置
- 一道腾讯前端试题,主要是算法
- 【算法】一道腾讯前端试题,位图法(bitmap),感受一下什么叫做“算法”
- java 面试中的一道编写一个截取字符串的函数
- 一道有趣的面试算法题
- 面试算法的复习和整理,争取每天一个算法[常更长新]
- 微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
- C/C++面试之算法系列--怎样快速检测出一个巨大的单链表中是否具备死链及其位置
- 百度面试的一道概率方面算法题
- 面试中简单算法题实现一道
- 对一道“写一个算法实现字符串逆序存储,要求不另设串存储空间.”题目的总结!
- 一道微软公司的面试题目的算法实现
- 转:C/C++面试之算法系列--怎样快速检测出一个巨大的单链表中是否具备死链及其位置
- 【算法系列】一道面试算法题
- 腾讯面试试题,算法案例
- 微软等数据结构+算法面试100题(3)--怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个