学会这道题,解决位运算,布莱恩·克尼根算法!
布莱恩·克尼根算法
题目描述1
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
提示:
请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。
提示:
输入必须是长度为 32 的 二进制串 。
代码
public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int count=0;if(n==0) return 0;while(n!=0){n&=n-1;count++;}return count;}
}
题目描述2
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
示例 1:
输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
示例 2:
输入:x = 3, y = 1
输出:1
提示:
0 <= x, y <= 2^31 - 1
解题思路:
根据题目的描述以及答案可以分析出:求的是两个数相同位对应数的不相等的数目;所以可以首先通过“异或”运算来将两个数化为想要的结果,然后在根据布莱恩·克尼根算法来进行求解。
代码
class Solution {public int hammingDistance(int x, int y) {int count=0;int n=x^y;if(n==0) return 0;while(n!=0){n&=n-1;count++;}return count;}
}
附加知识点:
与(&)运算:对应位全都为1的时候,结果为1,否则,结果为0。比如:
异或(^)运算:对应位相同时,为0;否则为1。比如:
学会这道题,解决位运算,布莱恩·克尼根算法!相关推荐
- LeetCode 461. 汉明距离 (布赖恩·克尼根算法)
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 内置位计数功能 class Solution {public int hamm ...
- LeetCode刷题(45)~位1的个数【布赖恩·克尼根算法】
题目描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 1: 输入:00000000000000000000000000001011 ...
- 【算法】布赖恩·克尼根算法——天才算法求二进制中1的个数
题目背景 做leetcode第461题汉明距离的时候,发现一个很骚的求1的个数的算法,大呼牛逼! 其实题目本身思路不难,就是求异或然后算1个个数,只是没有想到还可以用这么骚的方式来求. 布赖恩·克尼根 ...
- LeetCode刷题(43)~汉明距离【异或+布赖恩·克尼根算法】
题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = ...
- c语言位运算负数的实例_一招教你学会C语言中位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.注意,位运算只针对于整数进行操作. 运算符号 运算规则 1.&与运算:对应两个二进 ...
- 技术图文:位运算技术在求解算法题中的应用
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第一篇图文. 在总结这篇图文的时候,顺便把遇到的坑写了两篇辅助的图文,大家可以参考一下: 有符号整型的数据范围为什么负数比正数 ...
- 利用位运算的模四算法
将数列a=1,2,3,4,5,6,7...变成4,4,4,4,8,8,8,8,12,12...一个很巧妙的办法((a+3)>>2)<<2,当然不用位运算就可以用(a+3)-(a ...
- 位运算实现一些小算法
package com.asiainfo.cem_volte_hbase;/*** @ClassName Test* @Description 有意思的小算法* @Author qianxl* @Da ...
- [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]
[问题描述][简单] [解答思路] 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, ...
最新文章
- 技术12期:如何设计rowkey使hbase更快更好用【大数据-全解析】
- RANK() OVER(PARTITION BY deptno ORDER BY empno)
- 【收藏】Harbor私有仓库中如何彻底删除镜像释放存储空间:vmware/registry:2.6.2-photon进行垃圾回收
- 分析一下shell(转)
- Java 底层知识:什么是 “桥接方法” ?
- matlab与专业应用,MATLAB应用技术--在电气工程与自动化专业中的应用
- 《为iPad而设计:打造畅销App》——将iPad作为视频娱乐设备
- java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。
- 微波网络插入反射系数与输入反射系数
- python 2 函数
- vbs整人代码蓝屏_vbs整人代码
- 解决shardingsphere 4.1.1 SQLFeatureNotSupportedException: isValid sharding-jdbc
- 苹果 App Clip 技术详解
- vue集成环信Web IM
- CocosDashboard课堂笔记
- 延期年金(deferred annuity)
- (Adventure项目)自行车业务数据分析报告(三)
- 2012计算机科学排名,USNEWS2012年计算机科学专业研究生排名
- 利用ggplot2绘制功能富集气泡图
- HTML5和CSS3开发第九章课后作业
热门文章
- 租车APP开发的市场优势和主要功能
- PMP备考错题集-作业习题二
- 4 变量、作用域与内存
- Unity报错之【ArgumentOutOfRangeException: Index was out of range........】
- 130242014047-徐晓敏-实验一
- 女性过了25岁应该如何保养自己?
- FinClip11月产品更新:FIDE 插件开发功能优化;开发者文档英文版上线
- tkinter-button详解
- 计算机专业可以谈手机吗,手机真能取代电脑吗?谈手机/PC系统的大一统
- 原生JS写《像素鸟》的小游戏(下落的小鸟)