又被阿里机考虐了一次,决定改变策略开始刷题T^T

一个字节(8bit)的无符号整型,求其二进制中的“1”的个数,算法执行效率尽可能高。

最先想到的移位操作,末尾位&00000001,然后右移,算法复杂度为O(log(v))

 #include "stdafx.h"
#include <iostream>
using namespace std; int Count(int v);
int main()
{
int v = ;
int num = Count(v);
cout<<num<<endl;
return ;
} int Count(int v)
{
int num = ;
while(v)
{
num += v &0x01;
v >>= ;
}
return num;
}

还有一种算法复杂度为O(1)的,就是利用查表法,空间来换取时间,经典的理念。

http://blog.csdn.net/justpub/article/details/2292823

但是,看了上述博客后,发现弊端,这个操作需要访问内存,运行时间比法一长很多。

【扩展】:给定两个正整数(二进制表示)A和B,问把A变成B需要改变多少位,也就是说,两者的二进制表示中有多少位不同?

取一个C = A^B,C中1的个数就是A和B不同的位数。

编程之美Ex1——求二进制中1的个数的更多相关文章

  1. php实现求二进制中1的个数(右移、&、int32位)(n = n & (n - 1);)

    php实现求二进制中1的个数(右移.&.int32位)(n = n & (n - 1);) 一.总结 1.PHP中的位运算符和java和c++一样 2.位移运算符看箭头方向,箭头向左就 ...

  2. 编程之美2.5:寻找最大的K个数

    编程之美2.5:寻找最大的K个数 引申:寻找第k大的数: 方法一: // 选择第k大的数(通过改进快速排序来实现) public static void SelectShort(int[] array ...

  3. 统计无符号整数二进制中1的个数(Hamming weight)

    1.问题来源 之所以来记录这个问题的解法,是因为在在线编程中经常遇到,比如编程之美和京东的校招笔试以及很多其他公司都累此不疲的出这个考题.看似简单的问题,背后却隐藏着很多精妙的解法.查找网上资料,才知 ...

  4. 剑指Offer:二进制中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数. // 二进制中1的个数 #include <stdio.h> int wrong_count_1_bits(int n) // 错误解法 ...

  5. 基于visual Studio2013解决面试题之0410计算二进制中1的个数

     题目

  6. Algorithm --> 二进制中1的个数

    行文脉络 解法一——除法 解法二——移位 解法三——高效移位 解法四——查表 扩展问题——异或后转化为该问题 对于一个字节(8bit)的变量,求其二进制“1”的个数.例如6(二进制0000 0110) ...

  7. leetcode 338. Counting Bits,剑指offer二进制中1的个数

    leetcode是求当前所有数的二进制中1的个数,剑指offer上是求某一个数二进制中1的个数 https://www.cnblogs.com/grandyang/p/5294255.html 第三种 ...

  8. 剑指Offer - 九度1513 - 二进制中1的个数

    剑指Offer - 九度1513 - 二进制中1的个数2013-11-29 23:35 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. ...

  9. VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)

    1. 求数组中的和为0 的一对数的数量 注意,需要用到set import java.util.Scanner; public class Main{ public static void main( ...

随机推荐

  1. zlib编译方法

    点击这里下载zlib1.2.8源码 http://www.zlib.net/fossils/ ##编译方法一## - 解压源码文件到指定目录,例如 x:\zlib - 打开VS2015的Develop ...

  2. Class 的基本语法

    简介 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子. function Point(x, y) { this.x = x; this.y = y; } Point ...

  3. 数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

    2018-02-19 18:03:54 一.数据操纵语言(Data Manipulation Language) 数据操纵语言是指插入,删除和更新语言. 二.视图(View) 数据库三级模式,两级映射 ...

  4. Eclipse中快速定位

    Eclipse中快速定位 选中项目,ctrl+h 一.目标 查找如下的页面属于哪个activity 二.步骤 1.查找关键字 上述页面中“点我”两个字比较显眼,我们可以去android项目中搜索出现“ ...

  5. java中使用Lambda表达式的5种语法

    1,标准写法 思考下述情况: String[] arr = {"program", "creek", "is", "a" ...

  6. Selenium元素定位问题

    定位元素时,遇到一些诡异事件: 明明就是通过ID定位的,但是就是没有定位到该元素呢? 1.通过element.find_elements_by_xxx()获取该元素的个数,试试是否有获取到元素,0个表 ...

  7. 【原创】Centos 7利用软件Raid搭建ISCSI过程

    测试机器安装了4块2T硬盘,一块320G硬盘,利用320G硬盘安装CentOS 7系统,在CentOS 7系统上利用4块2T硬盘组建Raid 0,再配置iSCSI存储.注意,本文中的RAID指的是软R ...

  8. SPOJ-394-ACODE - Alphacode / dp

    ACODE - Alphacode #dynamic-programming Alice and Bob need to send secret messages to each other and ...

  9. Struts2的Convention插件

    Struts2的Convention插件的作用:在Struts2中的/lib/struts2-convention-plugin-x.x.xx.x.jar Convention插件会自动搜索位于act ...

  10. centos7 rabbitmq 安装

    http://www.rabbitmq.com/install-rpm.html Overview rabbitmq-server is included in Fedora. However, th ...