编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,
并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。

我的第一版:16mm

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int count =0;for (int i = 0;i < 31;i++){if ((n & (int) Math.pow(2, i)) != 0) {count ++;}}if (n < 0){count++;}return count;}
}

第二版:

        // 看了integer.toBinaryString 之后写的int count = 0;do {if ((n & 1) !=0) {count++;}}  while ((n >>>= 1) != 0);return count;

网上最快的算法:

Integer.bitCount

说好手写算法的。你竟然用java sdk 里面写好的算法。

我也仿写了一下:

//Hacker's Delightn = (n & 0x33333333) + ((n >>> 2) & 0x33333333);n = (n + (n >>> 4)) & 0x0f0f0f0f;n = n + (n >>> 8);n = n + (n >>> 16);return n & 0x3f;

还有一种写法,开始没想明白:后来想明白了:

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int k = 0;while(n!=0){n = n&(n-1);k++;}return k;}
}

他表示,首先n & (n-1)
n-1 就是把n 的二进制最后一位-1,如果是

不不不,还是没有想明白

总结:

1.java 源码里面有很多好的算法值得学习。

算法-------位1的个数相关推荐

  1. 每天Leetcode 刷题 初级算法篇-位1的个数

    题目要求: 力扣题解:循环和位移动 代码 /*** @program: mydemo* @description: 位1的个数* @author: Mr.zeng* @create: 2021-02- ...

  2. 191. 位1的个数 golang

    题目 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 1: 输入:00000000000000000000000000001 ...

  3. Stein算法(求两个数最大公约数)

    欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的.但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来. 考虑现在的硬件平台,一般整数最多也就是64位,对于这样的 ...

  4. java游戏将相_(Java)算法——位运算基础及基本应用

    位运算基础及基本应用 在处理整形数值时,可以直接对组成整形数值的各个位进行操作.这意味着可以使用屏蔽技术获得整数中的各个位(??) 位运算是针对整数的二进制进行的位移操作 整数 32位 , 正数符号为 ...

  5. LeetCode(191 461):位1的个数 Number of 1 Bits 汉明距离 Hamming Distance(Java)

    2019.9.14 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 之前在 ...

  6. 利用线性筛算法框架求解因数个数以及因数和问题

    利用线性筛算法框架求解因数个数以及因数和问题 一 前言 关于线性筛算法,在前一篇文章 利用线性筛以及素数筛求某一范围内的所有素数中已经介绍过,若读者对线性筛算法不太了解或有所遗忘,可以点击链接查看.此 ...

  7. 零起点学算法17——比较2个数大小

    零起点学算法17--比较2个数大小 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 输入2个整数, ...

  8. 领扣-191 位1的个数 Number of 1 Bits MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

    现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数. 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数.开始时将B初始化为0 ...

最新文章

  1. win7与ubuntu 13.04 64位双系统安装介绍
  2. ​数据分析最重要的 3 种特征编码,你真的能分清楚?
  3. vue 模板 html 表达式,Vue 模板template、指令directive、修饰符
  4. 使用 Packer、Ansible 和 Terraform 构建不可变的基础设施Devops工具链
  5. python查询最高分_精通 Oracle+Python,第 1 部分:查询最佳应践
  6. Promise使用,return的运用,解决回调地狱
  7. Flutter进阶—点击、拖动和其他手势
  8. 只允许,同一域名下IFRAME,禁止直接访问页面
  9. JVM初识之常用参数配置
  10. GIT 密钥生成工具puttygen使用技巧
  11. 仿短视频竖屏播放美nv源码 源码仅供技术参考
  12. 如何解决x盘莫名出现的msdia80.dll文件
  13. 解决Not all parameters were used in the SQL statement问题
  14. 从春运迁徙图看疫情变化
  15. VS2019 团队资源管理器--Git的使用(二)
  16. 仿ios相机apk_iCamera仿苹果相机app下载-iCamera仿苹果相机下载app手机版 v4.0-第六手游网...
  17. 密码重置用HTML怎么弄,win10密码重置盘怎么弄-win10创建密码重置盘的方法 - 河东软件园...
  18. 计算机组成及linux基础
  19. 体验DCGAN生成漫画头像
  20. ArcGIS的栅格数据空间分析——栅格插值(1)

热门文章

  1. python类的静态属性和静态方法_详解Python中的静态方法与类成员方法
  2. 上传附件每次都是上传中。_起标题头疼?每次卡在标题上 我都回顾这7种方法 创作灵感就来了...
  3. C++知识点7——函数传参
  4. 记录一下利用ffmpeg将avi转为mp4
  5. 第四次Scrum编码冲刺!!!!
  6. 代理模式和装饰者模式
  7. Internet设置-连接选项卡-局域网(LAN)设置 某些设置由系统管理员进行管理
  8. phantomjs使用说明
  9. 致所有IT工程师的信(网络工程师的发展方向)
  10. 田志刚:智慧的员工,个人知识管理