博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] O(1) Check Power of 2
阅读量:6312 次
发布时间:2019-06-22

本文共 1313 字,大约阅读时间需要 4 分钟。

Using O(1) time to check whether an integer n is a power of 2.

Example

For n=4, return true;

For n=5, return false;

思路:

知识点: n & (n - 1) 使得从右边数最后一个1变为0

x & (x - 1) 用于消去x最后一位的1, 比如x = 12, 那么在二进制下就是(1100)2x           = 1100x - 1       = 1011x & (x - 1) = 1000

 所以如果一个数是二的幂数,那么它肯定就只有一个1,x & (x - 1) 会使得唯一的1也变成0。同时,这个数要比0大

Note:

1) * 2 is same as << 1, so the number contains only one bit that is 1, the rest of bits are 0. 
2) n-1 sets all the bits after bit 1 from 0 to 1, and bit 1 to from 1 to 0
3) (n & (n-1)) always equal to 0 when n is power of 2
4) eg. 8(1000) &7(0111), 4(0100) &3(0011)
5) when n = 0, it suppose to return false, but it will return true.

class Solution {public:    /*     * @param n: An integer     * @return: True or false     */    bool checkPowerOf2(int n) {        // write your code here        return n > 0 && (n & (n - 1)) == 0;    }};

Here is a O(n) way:

class Solution {public:    /*     * @param n: An integer     * @return: True or false     */    bool checkPowerOf2(int n) {        // write your code here        int calculation = 0;        for (int exp = 1; calculation < n; ++exp){            calculation << 1;            if (calculation == n){                return true;            }        }         return false;    }};

 

转载于:https://www.cnblogs.com/codingEskimo/p/5684163.html

你可能感兴趣的文章
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
阅读Android源码的一些姿势
查看>>
Web语义化标准解读
查看>>
一份代码构建移动、桌面、Web全平台应用
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>
云计算产业如何率先推行信用管理?
查看>>
Android 类库书签更新(一)
查看>>