求二进制中1的个数(编程之美)
来源:互联网 发布:efe 矩阵分析中的权重 编辑:程序博客网 时间:2024/05/02 10:18
求二进制中1的个数:
解法一:O(logn)
int solve(int data){ int cnt = 0; while(data){ if(data & 1) cnt ++; data = data >> 1; } return cnt;}
解法二:O(M) M为1的个数
int solve(int data){ int cnt = 0; while(data){ data &= data - 1; cnt ++; } return cnt;}
精髓 : v & (v - 1)
v & (v + 1) 可以去掉末尾的连续多个1(如果末尾没有1 则不用去掉)
扩展问题:
把A变成B需要改变多少位?
<=>先问题等价转化:A与B有多少位不同? 显然是先异或,然后数1的个数就好了。下面附一份代码吧。
int solve(int a, int b){ int cnt = 0, data = a ^ b; while(data){ data &= data - 1; cnt ++; } return cnt;}
0 0
- 求二进制中1的个数(编程之美)
- 编程之美之求二进制中1的个数
- 编程之美---求二进制数中1的个数
- 《编程之美》:求二进制数中1的个数
- [编程之美]求二进制中1的个数
- 【编程之美】求二进制数中1的个数
- 编程之美2.1 求二进制中1的个数
- 编程之美---求二进制中1的个数
- 【编程之美】求二进制数中1的个数
- [编程之美]求二进制表示中1的个数
- 编程之美--求二进制中1的个数
- 编程之美---求二进制数中1的个数
- 【编程之美】2.1求二进制中1的个数
- 编程之美2.1 求二进制中1的个数
- 编程之美 2.1 求二进制中1的个数
- 编程之美"求二进制中1的个数"
- 《编程之美》2.1 求二进制中1的个数
- 编程之美---求二进制数中1的个数
- Linux环境下简单的NFS部署
- python中的string模块
- Spring security oauth2最简单入门环境搭建--二、干货
- HDU11186
- C和汇编混合编程
- 求二进制中1的个数(编程之美)
- 循环引用 场景
- 计算随机抛1000次的骰子各个数字产生的概率。
- python之SQLAlchemy
- 使用Bmob为你的移动应用提供后端数据服务
- 清除Planning服务器端的TMP文件
- 关于this指针
- Python出现TypeError: file() argument 1 must be encoded string without NULL bytes, not str问题解决
- 多表查询