漫画:三分钟学习一道位运算的面试题,万一遇到了呢?
今天是小浩算法“365刷题计划”第60天。分享一道比较简单但是很经典的题目。话不多说,直接看题。
01
PART
2的幂
这道题,大家先想一想是用什么思路进行求解?
第231题:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
(瞪一瞪就全部掌握)
PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。
02
PART
题目分析
这道题是通过位运算来进行求解的非常典型的题目。当然,其他的题解也有很多:比如暴力求解,又或者是不停除以2通过递归的方式求解,等等。但是并不是今天我想说的。
先观察一些是2的幂的二进制数:
可以发现这些数,都是最高位为1,其他位为0。所以我们把问题转化为“判断一个数的二进制,除了最高位为1,是否还有别的1存在”。然后我们再观察下面这样的一组数,对应着上面的数减去1:
我们对两组数求“&”运算:
可以看到,对于N为2的幂的数,都有 N&(N-1)=0 ,所以这就是我们的判断条件。(这个技巧可以记忆下来,在一些别的位运算的题目中也是会用到的)
根据分析,完成代码:
1//go
2func isPowerOfTwo(n int) bool {
3 return n > 0 && n&(n-1) == 0
4}
郑重申明(读我的文章必看):
本系列所有教程都不会用到复杂的语言特性,不需要担心没有学过相关语法,使用各语言纯属本人爱好。
作为学术文章,虽然风格可以风趣,但严谨,我是认真的。本文所有代码均在leetcode上进行过测试运行。
算法思想才是最重要的。
03
PART
证明过程
“下里巴人”和“阳春白雪”是古代楚国的歌曲名,屈原的大弟子宋玉曾著有《对楚王问》:“客有歌于郢中者,其始曰下里巴人,国中属而和者数千人……其为阳春白雪,国中属而和者不过数十人。”“下里巴人”和“阳春白雪”一词后来被用来泛指通俗和高雅的文艺作品。 古琴十大名曲之一。
“阳春白雪,下里巴人”这个比喻虽然有点牵强,但是却难掩位运算的重要性。位运算在整个算法体系里,不少人可能会觉得有点食之无味、弃之可惜的意思。但其实,完全不是这样!有这种想法的,大多是初学者。对于这点,应该C系的玩家,会深有感触。万丈高楼平地起,暂且不说位运算在底层运算中占据了多大比重,单是整个leetcode列表里,打着位运算标签的题目就超过80余道,我想已经说明了问题。至少,在面试这块,你必须对位运算了如指掌!所以,今天的题目算是一个引子,后面我会出一个位运算的专题,希望尽我所能,帮助大家攻克这一类型的问题。
1. 全栈架构之打包推荐【建议收藏,常读】
2. 一个空格引发的“惨案“
3. 分布式系统中Session共享的常用方案
4. Java语言“坑爹”排行榜TOP 10
5. 我是一个Java类(附带精彩吐槽)
6. mysql索引失效,差点我的工作凉了
7. 既生synchronized,何生volatile?
8. 微服务一直火,为什么服务化要搞懂?
9. MySQL的COUNT语句,不简单!
10. 漫画:HashSet和TreeSet实现与原理
扫码二维码关注我
·end·
—如果本文有帮助,请分享到朋友圈吧—
我们一起愉快的玩耍!
你点的每个赞,我都认真当成了喜欢
漫画:三分钟学习一道位运算的面试题,万一遇到了呢?相关推荐
- 7 分钟全面了解位运算
位运算是我们在编程中常会遇到的操作,但仍然有很多开发者并不了解位运算,这就导致在遇到位运算时会"打退堂鼓".实际上,位运算并没有那么复杂,只要我们了解其运算基础和运算符的运算规则, ...
- C语言学习笔记--位运算
这一节主要说的是位运算,计算机中的执行速度:位运算 > 加减 > 乘除 > 求余 位运算就是将数字转换成二进制后进行运算,之后再将数字转换成原来的进制 与运算:当两个数相与时,只有都 ...
- 基础算法(三):双指针/位运算/离散化/区间合并
目录 1.双指针算法 引例 最长连续不重复子序列 2.位运算 n的二进制表示中第k位是几 lowbit(x)操作:返回x二进制表示中的最后一位1 3.离散化 4.区间合并 1.双指针算法 引例 输入一 ...
- java 位运算 hashcode_hashcode面试题
Java codepublic classValuePair {public inta= 4,b;public booleanequals(Object other){try{ ValuePair o ...
- 【三分钟学习FFMPEG一个知识点】FFMPEG关于avio_alloc_context申请使用内存释放问题
问题: 使用ffmpeg发现av_malloc申请的内存最后不能用av_free函数释放,会崩溃. 代码示例: unsigned char * iobuffer = NULL; iobuffer = ...
- java 接口强制转换_三分钟学习Java泛型中T、E、K、V、?的含义
作者:Java武学秘籍
- 我在乐字节学习前端的第三天-学习笔记:H5+CSS3面试题总结
H5+css3面试题总结 一.html5和html的区别: 1.html5新增了语义化标签:footer .nav.section- 2.html5完全支持css3 3.支持本地离线存储 4.新增了c ...
- 三分钟记住20道性能测试经典面试题
1.什么是性能测试? 测试系统有没有性能问题 考虑时间,空间 服务端资源是否足够 响应时间是否超时 系统是否足够稳定 2.性能测试的应用领域有哪些? 能力验证:乙方向甲方交付项目时,声明项目的性能数据 ...
- 漫画:位运算技巧整理汇总+一道被嫌弃的题目
(这首歌挺喜欢的...分享出来) 今天是小浩算法"365刷题计划"第65天.这两天总有人来问我,做公众号赚了多少钱,或者就是怎么能和你一样,2个月就做到7000粉丝.说实话,至少到 ...
最新文章
- android file mkdir,android file.mkdir()一直返回false问题
- JSP中文乱码问题解决
- webpack自动打包功能配置
- 读书笔记4数据的读入和保存
- [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
- 正则表达式:Pattern 与Matcher
- python爬虫笔记(三):提取(二)
- mysql读写分离和分布式_MySQL主从复制与读写分离
- Pyhton——动态语言
- go error的理解
- python 指定gpu_加快Python算法的四个方法:Numba篇
- event.srcElement 与event.target
- ASP.NET加密解密
- [erlang]一次erlcron崩溃引起的事故分析
- 怎样把win7系统下的屏幕设置成护眼的非常柔和的豆沙绿色?
- 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
- DDD中常提到的应用架构总结(六边形、洋葱、整洁、清晰)
- Linux目录文件操作命令篇--(工作常用命令的深度使用,小白必收藏)
- 普通人职场自我反省十条
- 解决Win10系统由于INF文件失效导致安卓MTP驱动安装失败的问题