s*n
2 楼
刚腾出来一小块地,不知道种啥,感觉毛豆或者花生挺好管理的,五区现在种毛豆花生
来得及吗?
来得及吗?
k*r
11 楼
被2除看余数吗?余数是1,counter++,商继续直到为1
l*a
12 楼
怎么做都是lg(n)。
n为该数十进制的值,
bit的个数为lg(n)。
n为该数十进制的值,
bit的个数为lg(n)。
b*e
16 楼
移位神马的弱爆了,用这个: x&(x-1)
l*b
18 楼
int getBitsOne(int c)
{
c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
return c;
}
{
c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
return c;
}
d*x
19 楼
can u do it better?
【在 l*******b 的大作中提到】
: int getBitsOne(int c)
: {
: c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
: c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
: c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
: c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
: c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
: return c;
: }
【在 l*******b 的大作中提到】
: int getBitsOne(int c)
: {
: c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
: c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
: c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
: c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
: c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
: return c;
: }
c*t
26 楼
正解!
我电面被问到,给了lg(n)解法,bug free,对方似乎不太满意啊。
问一下如果没做过,有人能直接给这个解吗?还是我bit operation太弱?
【在 l*******b 的大作中提到】
: int getBitsOne(int c)
: {
: c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
: c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
: c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
: c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
: c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
: return c;
: }
我电面被问到,给了lg(n)解法,bug free,对方似乎不太满意啊。
问一下如果没做过,有人能直接给这个解吗?还是我bit operation太弱?
【在 l*******b 的大作中提到】
: int getBitsOne(int c)
: {
: c = ((c & 0xaaaaaaaa)>>1) + (c & 0x55555555);
: c = ((c & 0xcccccccc)>>2) + (c & 0x33333333);
: c = ((c & 0xf0f0f0f0)>>4) + (c & 0x0f0f0f0f);
: c = ((c & 0xff00ff00)>>8) + (c & 0x00ff00ff);
: c = ((c & 0xffff0000)>>16) + (c & 0x0000ffff);
: return c;
: }
l*b
29 楼
这个其实也是log n的解法呀,n = 32位算5步对应log 32, 更好的不知道了。。
多看看就知道了吧,和教calculus的学生一样,总问这个有什么一般的方法,那只好告
诉他们把吉米多维奇上的积分都解了就可以了,哈哈
多看看就知道了吧,和教calculus的学生一样,总问这个有什么一般的方法,那只好告
诉他们把吉米多维奇上的积分都解了就可以了,哈哈
h*n
33 楼
what about this algorithm?
int GetBitsNum(int num)
{
int res = 0;
while(num)
{
res++;
num &= (num-1);
}
return res;
}
It should be better that log N, the number of operation is only proportional
to the number of 1 bit in the binary representation.
for example, if input is 1000000, then only one iteration is enough.
if input is 1100000, then two iterations and so on.
Of course, you can achieve real O(1) complexity by creating a huge hashtable
for all the possible integers in advance.
int GetBitsNum(int num)
{
int res = 0;
while(num)
{
res++;
num &= (num-1);
}
return res;
}
It should be better that log N, the number of operation is only proportional
to the number of 1 bit in the binary representation.
for example, if input is 1000000, then only one iteration is enough.
if input is 1100000, then two iterations and so on.
Of course, you can achieve real O(1) complexity by creating a huge hashtable
for all the possible integers in advance.
Q*e
36 楼
cnt = 0;
while (x) {
cnt++;
x &= (x-1);
}
while (x) {
cnt++;
x &= (x-1);
}
相关阅读
北木,求蔬菜种子啊【擂台赛】谁家的甜薯有我多天街小雨大家菜地里的马蜂,蜜蜂多吗?[求助]Japanese beetle 喷药后树叶一夜之间全黄了咋回事谁知道“高洋”何许人也?xing 师弟,lowes $10 0ff $50 胖子又来了!厉害的小童工现在还能种什么?第3周版标--竞拍开始!!老话新说-----老中做饭问题【擂台赛】谁家的太阳花有我的漂染得漂亮借人气哪儿可以买到那种墨西哥的红辣椒, 不是狠辣,求教 五彩西红柿的种子会退化吗?紫薯(叶子)gardening版申请发放”N区第一”活动奖励 (转载)【擂台赛】盆栽的鬼子姜啊,你咋就长得这么高?HD几个月前50%off的球茎我一直放在地下室阴凉处,下个月我能开始埋在土里了吗?(6区)秋实,buffaloboy喊你呢...哈哈【夏天的收获】ROI最高的水果