O(1)时间检测2的幂次
来源:互联网 发布:音频编辑软件哪个好 编辑:程序博客网 时间:2024/05/16 00:22
题目描述:用 O(1) 时间检测整数 n 是否是 2 的幂次。
样例:n=4,返回 true; n=5,返回 false.
乍一看,好像没什么思路,最笨的思路就是一直除2,看最后能否等于1,但是显然不符合时间复杂度的要求。
不过在之前学习位运算的过程中,我们了解过整数n与n - 1的关系(详见:点击打开链接):当n是偶数,n -1是奇数,二进制形式中,那么n - 1就是偶数n 的尾巴上的所有0(直到倒数第一个1为止),全部变为1,且倒数第一个1变为0. 例如:142:10100000;141:10011111.
根据上面的理论,如果一个数为2^n,那么它的二进制形式为10000...000这种形式,而2^n - 1一定是0111...111这种形式,这两个数做“与”运算就一定会导致结果是0。所以,我们需要做的工作就是判断一个数n, n & (n-1)是不是等于0.
需要注意的是整数0, 0 - 1 = -1,负数的二进制会有点麻烦,而0本身不是2的幂次,所以将这种特殊情况排除就行了。
代码如下:
class Solution: """ @param n: An integer @return: True or false """ def checkPowerOf2(self, n): return not n & (n - 1) and n != 0 # write your code here
0 0
- LintCode 142. O(1)时间检测2的幂次
- O(1)时间检测2的幂次
- LintCode:O(1)时间检测2的幂次
- O(1)时间检测2的幂次
- LintCode :O(1)时间检测2的幂次
- Java实现-O(1)时间检测2的幂次
- O(1)时间检测2的幂次
- O(1)时间检测2的幂次-LintCode
- O(1)检测2的幂次
- O次(1)检测2的幂
- 2的次方(去哪儿2017校招真题) & O(1)时间检测2的幂次(LintCode)
- 用 O(1) 时间检测整数 n 是否是 2 的幂次。
- 比特位操作——O(1)时间检测2的幂次
- 142.O(1) Check Power of 2-O(1)时间检测2的幂次(容易题)
- O(1)时间检测2的幂
- 题目 :O(1)检测2的幂次
- lintcode-O(1)检测2的幂次-142
- LintCode-O(1)检测2的幂次
- C++中利用系统函数启动或关闭外部程序(待完善)
- 求某范围内最大公约数
- session无法使用,验证码总是不对
- 使用VC开发ActiveX时,提示程序无法启动 要注册利用“regsvr32”命令控件的注册,注册失败方法
- shape/selector
- O(1)时间检测2的幂次
- 结构体、枚举
- 数据库设计概念
- viewPager+photoView实现网络图片加载左右滑动+手势缩放功能+滑动到下一页其他页面恢复默认大小
- CocoaPods管理第三方开源组件,入门介绍
- C#学习笔记一
- 自定义对象的拷贝(copy 和 strong 的区别)
- 架构设计:系统间通信(35)——被神化的ESB(下)
- 自己制作的播放器MeITo