Power of Two 二的幂
来源:互联网 发布:热血屠龙光翼进阶数据 编辑:程序博客网 时间:2024/04/30 05:32
最近做到一个算法题,要求judge the number whether is the power of two,即判断一个数是否是二的幂。
做的时候自己尽量可能地想把时间缩短,因为数据量比较大。
第一次。用了移位的方法后,提示Time limit exceeded。
第二次。考虑了建立一个数组,直接用数组存储该下标所代表的树是否满足条件的值。比如a[4]=1,a[6]=0。结果还是超时了。
第三次。分析了数字和二进制之间的关系:(~x & (x-1))-x+1。假设一个数x=4,用二进制表示为00000100。另一个数是6,用二进制表示为00000110。
x 00000100 00000110
~x 11111011 11111001
x-1 00000011 00000101
~x&(x-1) 00000011 00000001
(~x & (x-1))-x 11111111 11111011
(~x & (x-1))-x+1 00000000 11111100
可以得到满足条件的数在进行以上运算后会变为0。
但是结果还是超时。
第四次。没办法,继续研究。再次分析:以上的式子进行了五次的运算,所以努力地又把它缩减为四次运算:((~x+1) & x)-x
x 00000100 00000110
~x 11111011 11111001
~x+1 11111100 11111010
(~x+1) & x 00000100 00000010
((~x+1) & x)-x 00000000 11111100
可以得到满足条件的数在进行以上运算后会变为0。
但是结果还是超时。
第五次。实在没办法,继续压缩。最后居然压缩成了两次运算:(x-1)&x。
x 00000100 00000110
x-1 00000011 00000101
(x-1)&x 00000000 00000100
可以得到满足条件的数在进行以上运算后会变为0。
但是结果还是超级失望地超时了。
现在还是没能知道怎么弄,不知道是不是那个系统出了问题所以一直没通过。不过想想,自己居然把一个问题完成得这么好,还是蛮开心的!十分值得。
只是不知道上面的分析有没有错?
- Power of Two 二的幂
- Power of Two | Leetcode 二的幂
- Power of Two 判断一个数是不是2的幂
- LeetCode 231 Power of Two(2的幂)
- Power of Two ----- 判断一个数是不是2的幂
- LeetCode 231. Power of Two ---- 2的幂
- leetcode_231. Power of Two 判断2的幂
- 231. Power of Two | 判断2的幂
- Power of Two
- [LeetCode] Power of Two
- 【LeetCode】Power of Two
- Power of Two
- power of two
- [Leetcode]Power of Two
- Power of Two
- [leetCode] Power of Two
- Power of Two
- 231Power of Two
- asp.net和ajax未捕获异常处理机制
- sql时间查询
- weather jp
- 你怎么就一根筋呢? STL之vector and string用还是不用
- Eight八位数问题
- Power of Two 二的幂
- Python正则表达式操作指南
- 雅思阅读--读书笔记
- POJ 1815 Friendship
- 来过的瞅瞅~~~~~~~~~
- 2011五大安全趋势预言
- 矩阵乘法
- X5045使用手记
- 方兴东:中国网站十年