今天是小浩算法“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·

—如果本文有帮助,请分享到朋友圈吧—

我们一起愉快的玩耍!

你点的每个赞,我都认真当成了喜欢

漫画:三分钟学习一道位运算的面试题,万一遇到了呢?相关推荐

  1. 7 分钟全面了解位运算

    位运算是我们在编程中常会遇到的操作,但仍然有很多开发者并不了解位运算,这就导致在遇到位运算时会"打退堂鼓".实际上,位运算并没有那么复杂,只要我们了解其运算基础和运算符的运算规则, ...

  2. C语言学习笔记--位运算

    这一节主要说的是位运算,计算机中的执行速度:位运算 > 加减 > 乘除 > 求余 位运算就是将数字转换成二进制后进行运算,之后再将数字转换成原来的进制 与运算:当两个数相与时,只有都 ...

  3. 基础算法(三):双指针/位运算/离散化/区间合并

    目录 1.双指针算法 引例 最长连续不重复子序列 2.位运算 n的二进制表示中第k位是几 lowbit(x)操作:返回x二进制表示中的最后一位1 3.离散化 4.区间合并 1.双指针算法 引例 输入一 ...

  4. java 位运算 hashcode_hashcode面试题

    Java codepublic classValuePair {public inta= 4,b;public booleanequals(Object other){try{ ValuePair o ...

  5. 【三分钟学习FFMPEG一个知识点】FFMPEG关于avio_alloc_context申请使用内存释放问题

    问题: 使用ffmpeg发现av_malloc申请的内存最后不能用av_free函数释放,会崩溃. 代码示例: unsigned char * iobuffer = NULL; iobuffer = ...

  6. java 接口强制转换_三分钟学习Java泛型中T、E、K、V、?的含义

    作者:Java武学秘籍

  7. 我在乐字节学习前端的第三天-学习笔记:H5+CSS3面试题总结

    H5+css3面试题总结 一.html5和html的区别: 1.html5新增了语义化标签:footer .nav.section- 2.html5完全支持css3 3.支持本地离线存储 4.新增了c ...

  8. 三分钟记住20道性能测试经典面试题

    1.什么是性能测试? 测试系统有没有性能问题 考虑时间,空间 服务端资源是否足够 响应时间是否超时 系统是否足够稳定 2.性能测试的应用领域有哪些? 能力验证:乙方向甲方交付项目时,声明项目的性能数据 ...

  9. 漫画:位运算技巧整理汇总+一道被嫌弃的题目

    (这首歌挺喜欢的...分享出来) 今天是小浩算法"365刷题计划"第65天.这两天总有人来问我,做公众号赚了多少钱,或者就是怎么能和你一样,2个月就做到7000粉丝.说实话,至少到 ...

最新文章

  1. android file mkdir,android file.mkdir()一直返回false问题
  2. JSP中文乱码问题解决
  3. webpack自动打包功能配置
  4. 读书笔记4数据的读入和保存
  5. [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
  6. 正则表达式:Pattern 与Matcher
  7. python爬虫笔记(三):提取(二)
  8. mysql读写分离和分布式_MySQL主从复制与读写分离
  9. Pyhton——动态语言
  10. go error的理解
  11. python 指定gpu_加快Python算法的四个方法:Numba篇
  12. event.srcElement 与event.target
  13. ASP.NET加密解密
  14. [erlang]一次erlcron崩溃引起的事故分析
  15. 怎样把win7系统下的屏幕设置成护眼的非常柔和的豆沙绿色?
  16. 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
  17. DDD中常提到的应用架构总结(六边形、洋葱、整洁、清晰)
  18. Linux目录文件操作命令篇--(工作常用命令的深度使用,小白必收藏)
  19. 普通人职场自我反省十条
  20. 解决Win10系统由于INF文件失效导致安卓MTP驱动安装失败的问题

热门文章

  1. OpenGL中关于矩阵缩放、平移、旋转的讲解
  2. Caddy 源码阅读
  3. 速览默默发展的Web3邮箱赛道
  4. opera 无法访问网络
  5. fastreport问题集合
  6. 攻防世界 [简单] 凯撒大帝在培根里藏了什么
  7. 回顾2018年云计算九大亮点
  8. 虚拟机服务器分配内存,服务器虚拟机分配内存大小
  9. 机器学习 之 Kmeans聚类
  10. Java中string字符串和char字符之间的千丝万缕