编程之美-求二进制中1的个数
来源:互联网 发布:网络直播打赏 编辑:程序博客网 时间:2024/05/18 20:07
书中的题目是:求一个字节(无符号)中1的个数。总共给出了五种方法。
解法一:利用除法和求模运算。计算机中的求模运算比较耗时。
template <typename T>int Count(T v){int num = 0;while (v){if (v % 2 == 1){++num;}v /= 2;}return num;}
解法二:利用位运算。时间复杂度是O(lgv)。
template <typename T>int Count1(T v){int num = 0;while (v){if (v &(0x01 << (sizeof(v) << 2 -1))){++num;}v = v << 1;}return num;}
template <typename T>int Count2(T v){int num = 0;while (v){++num;v &= (v - 1);}return num;}
解法四:利用分支操作。
解法五:利用表查找。
int countTable[256] = { 0, 1, 1, 2, 1, ..., 7, 7, 8 }; int Count(int v) { return countTable[v]; }
解法五 时间复杂度为:O(1),但是空间复杂度高。是典型的空间换取时间。只有在位数比较小的情况下适用。
另外:这边博客还分析了另外的几个解法(针对具体的应用,时间会更快),有兴趣的可以参考一下。
http://blog.csdn.net/justpub/article/details/2292823
0 0
- 编程之美之求二进制中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的个数
- 编程之美-求二进制中1的个数
- Applet读取MxGraph生成的mxe(xml格式)文件的思路
- log4j 配置
- Java修饰符、抽象类、接口
- ofbiz 设置屏幕
- JNI & NDK
- 编程之美-求二进制中1的个数
- 改进基于优先队列的最短路径搜索『洪水流思想的体现』
- ofbiz myeclipse 配
- 在Chrome调试JavaScript代码以及审查元素各个tab说明
- ofbiz 购物样式 ecommain.css
- Secure Delivery Center的许可证管理
- Step into Kotlin - 18 - Extension 与 this
- 解决WorkBench执行更新语句时【1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)】
- 从零开始搭建hadoop分布式集群环境:(二)安装JDK