算法-------位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘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的个数相关推荐
- 每天Leetcode 刷题 初级算法篇-位1的个数
题目要求: 力扣题解:循环和位移动 代码 /*** @program: mydemo* @description: 位1的个数* @author: Mr.zeng* @create: 2021-02- ...
- 191. 位1的个数 golang
题目 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 1: 输入:00000000000000000000000000001 ...
- Stein算法(求两个数最大公约数)
欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的.但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来. 考虑现在的硬件平台,一般整数最多也就是64位,对于这样的 ...
- java游戏将相_(Java)算法——位运算基础及基本应用
位运算基础及基本应用 在处理整形数值时,可以直接对组成整形数值的各个位进行操作.这意味着可以使用屏蔽技术获得整数中的各个位(??) 位运算是针对整数的二进制进行的位移操作 整数 32位 , 正数符号为 ...
- LeetCode(191 461):位1的个数 Number of 1 Bits 汉明距离 Hamming Distance(Java)
2019.9.14 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 之前在 ...
- 利用线性筛算法框架求解因数个数以及因数和问题
利用线性筛算法框架求解因数个数以及因数和问题 一 前言 关于线性筛算法,在前一篇文章 利用线性筛以及素数筛求某一范围内的所有素数中已经介绍过,若读者对线性筛算法不太了解或有所遗忘,可以点击链接查看.此 ...
- 零起点学算法17——比较2个数大小
零起点学算法17--比较2个数大小 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lld Description 输入2个整数, ...
- 领扣-191 位1的个数 Number of 1 Bits MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...
现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数. 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数.开始时将B初始化为0 ...
最新文章
- win7与ubuntu 13.04 64位双系统安装介绍
- ​数据分析最重要的 3 种特征编码,你真的能分清楚?
- vue 模板 html 表达式,Vue 模板template、指令directive、修饰符
- 使用 Packer、Ansible 和 Terraform 构建不可变的基础设施Devops工具链
- python查询最高分_精通 Oracle+Python,第 1 部分:查询最佳应践
- Promise使用,return的运用,解决回调地狱
- Flutter进阶—点击、拖动和其他手势
- 只允许,同一域名下IFRAME,禁止直接访问页面
- JVM初识之常用参数配置
- GIT 密钥生成工具puttygen使用技巧
- 仿短视频竖屏播放美nv源码 源码仅供技术参考
- 如何解决x盘莫名出现的msdia80.dll文件
- 解决Not all parameters were used in the SQL statement问题
- 从春运迁徙图看疫情变化
- VS2019 团队资源管理器--Git的使用(二)
- 仿ios相机apk_iCamera仿苹果相机app下载-iCamera仿苹果相机下载app手机版 v4.0-第六手游网...
- 密码重置用HTML怎么弄,win10密码重置盘怎么弄-win10创建密码重置盘的方法 - 河东软件园...
- 计算机组成及linux基础
- 体验DCGAN生成漫画头像
- ArcGIS的栅格数据空间分析——栅格插值(1)
热门文章
- python类的静态属性和静态方法_详解Python中的静态方法与类成员方法
- 上传附件每次都是上传中。_起标题头疼?每次卡在标题上 我都回顾这7种方法 创作灵感就来了...
- C++知识点7——函数传参
- 记录一下利用ffmpeg将avi转为mp4
- 第四次Scrum编码冲刺!!!!
- 代理模式和装饰者模式
- Internet设置-连接选项卡-局域网(LAN)设置 某些设置由系统管理员进行管理
- phantomjs使用说明
- 致所有IT工程师的信(网络工程师的发展方向)
- 田志刚:智慧的员工,个人知识管理