LeetCode-461. 汉明距离(java)
👨🎓作者:bug菌
✏️博客: 、 、 、 等
🎉简介:CSDN/阿里云/华为云/51CTO 博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费领取简历模板/学习资料/大厂面试真题/职业规划等海量资料。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 6 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更
系列文章吧。希望能帮助更多的初学者们快速入门!如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对bug菌写文道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
哈喽,小伙伴们,我是bug菌呀👀。由于上海这波疫情,导致很多小伙伴扛不住降薪打击而选择离开自己的上家,借此, 对于没有工作或者即将失业要重新面试的小伙伴而言,bug菌想接着把上几个月更新的专栏
给重新捯饬起来,只为帮助小伙伴们,能顺利上岸,收到自己心仪的offer,面试第一关, 就是算法题。因为我始终坚信,变强绝对不是一朝一夕,而是贵在长久坚持,持之以恒。所以,赶紧跟着bug菌的步伐卷起来吧⏰,变强从这一刻开始➕🧈。小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
二、题目描述🔥
题目:
两个整数之间的指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数
x
和y
,计算并返回它们之间的汉明距离。
具体请看如下示例:
示例 1:
输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
示例 2:
输入:x = 3, y = 1
输出:1
提示:
1 <= x,y <= 2^31 - 1
题目来源:
题目难度:⭐⭐⭐
三、思路分析🔥
一看到这题的第一印象,这出题人想必是个爱历史之人,都把历史背景给套上了,好一个明汉之距离,我越发的感兴趣,这题我今天必刷,哦吼,点进去,竟然不是啥历史背景,不就是求两数二进制位的互补次数么,有点小失落,不过这道题倒是能做一下。
最近是掉二进制窝了么,连续做了好几天的二进制题,今天这题也与二进制紧紧相连,没办法,既然都点进来了,那就干脆给刷了吧。如下是我对这道题的一个解题思路。至于最暴力的方法我就不给大家普及了,就是将该二进制转成对于的String,Integer.toBinaryString()方法即可,然后分别对s1、s2进行同位判断,相异则count+1,最后返回count即可。我在代码AC处遍历对比法处出贴了该思路的代码,仅供参考,写法不是很优雅。
思路1-内置位计数法
这种思路还是我看了官解才知道的,java竟然有提供这么个方法,在java.lang包中Integer类中有bitCount()方法,该方法作用就是以整数值的二进制补码表示形式返回one-bits的数量计数。这不就是完全符合该题么?它要的二进制位相异的就计数,哈哈哈,只能说太绝了。
思路2-位运算法
传统做法,肯定就是依次对二进制位对比了。首先将x、y进行异或(^)操作,结果res中0的位表示x、y的这个二进制位置是相同的,1是位表示x、y的这个二进制位置不同。因此 计算 res 中为1的个数即可, 就将res每个位置与1 进行与(&)操作,记录个数即可。
四、算法实现🔥
AC代码-内置位计数法
具体算法代码实现如下:
AC代码-位运算法
具体算法代码实现如下:
AC代码-遍历对比法
具体算法代码实现如下:
五、总结🔥
内置位计数法-leetcode提交运行结果截图如下:
复杂度分析:
- 时间复杂度:logC)。C 是元素的数据范围。
- 空间复杂度:O(1)。
内置位计数法-leetcode提交运行结果截图如下:
复杂度分析:
- 时间复杂度:logC)。
- 空间复杂度:O(1)。
总而言之,对于这题,无非就是考察我们的位运算基础,核心就是对于 x^y,因为它可以对比获取
不同位置的结果,因为对于 位运算^
,当两对应的二进位相异时,结果为1,这也就是符合题意的统计结果,最后只需要将二进制进行异或(^)运算,其x^y = 1,次数+1,最后返回count即成功破题。
再者,解题道路千万条,欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。
好啦,以上就是本期的所有内容啦,咱们下期见咯。
... ...
好啦,以上就是这期的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『 』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。
六. 热文推荐🔥
滴~如下推荐【Spring Boot 进阶篇】的学习大纲,请小伙伴们注意查收。
...
七. 文末🔥
如果想系统性的学习Spring Boot,小伙伴们直接订阅bug菌专门为大家创建的Spring Boot专栏
从入门到精通,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。如果你有一定的基础却又想精进Spring Boot,那么
将会是你的最好的选择;此栏进行知识点+实例+项目的学习方式全面深入框架剖析及各种高阶玩法,励志打造全网最全最新springboot学习专栏,投资学习自己性价比最高。我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
- 点赞
- 收藏
- 关注作者
评论(0)