查看: 3339| 回复: 14
收起左侧

Amazon :最简捷的方法判断一个数是否为2的幂

wwwyhx | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
最简捷的方法判断一个数是否为2的幂

上一篇:Amazon: Program a memory leak detection function
下一篇:Microsoft : Find nodes between two values in a BST
zach 2011-8-5 05:27:34 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   2402
91%
9%
238
EE飘过,我打酱油的……反选看答案
二进制看结尾是不是0?
回复

使用道具 举报

Jawley 2011-8-5 06:34:51 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   427
96%
4%
16
楼上说的是如何判断是否2的倍数,如果是2的整数幂,那应该是除了第一个1以外后面全是零。

这个我主要是不知道怎么才算简捷,如果是指时间复杂度的话,就反复右移就好了,O(logn),难道还会有O(1)的解法?
回复

使用道具 举报

 楼主| wwwyhx 2011-8-5 08:03:12 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
楼上说的是如何判断是否2的倍数,如果是2的整数幂,那应该是除了第一个1以外后面全是零。

这个我主要是不知道怎么才算简捷,如果是指时间复杂度的话,就反复右移就好了,O(logn),难道还会有O(1)的解法?

Jawley 发表于 2011-8-5 06:34



    有,a & (a - 1)
回复

使用道具 举报

Jawley 2011-8-5 10:52:00 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   427
96%
4%
16
有,a & (a - 1)
wwwyhx 发表于 2011-8-5 08:03


果然精妙

不过隐约觉得还是有点投机取巧的感觉……其实对一个为n的数做减法,本身的复杂度就是O(logn)了……
回复

使用道具 举报

zach 2011-8-5 11:31:38 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   2402
91%
9%
238
楼上说的是如何判断是否2的倍数,如果是2的整数幂,那应该是除了第一个1以外后面全是零。

这个我主要是不知道怎么才算简捷,如果是指时间复杂度的话,就反复右移就好了,O(logn),难道还会有O(1)的解法?

Jawley 发表于 2011-8-4 17:34

嗯嗯 我就那个意思
4L牛
你们CS果然不是一般人能弄得
回复

使用道具 举报

darksteel 2011-8-5 15:33:45 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   32
100%
0%
0
回复 5# Jawley
你说的对,如果把操作一位作为O(1)的话,其实减法和按位&复杂度都是O(logn),应该没有比这更好的办法。上面那种操作确实很巧妙,更普遍的应用是在统计一个数的二进制表示中1的个数:
while(n) {
    n = n & (n-1);
    count++;
}
回复

使用道具 举报

coder 2011-8-23 05:39:42 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   1
100%
0%
0
有,a & (a - 1)
wwwyhx 发表于 2011-8-5 08:03



    Cool!
回复

使用道具 举报

MacPie 2011-9-10 18:32:36 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   30
97%
3%
1
转化为二进制,最左边为1,且其他位为0即是。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表