這種東西~到底是誰想出來的呢?!
想必那個人不是我吧Orz
大概一個感覺(?) 就是相鄰兩個數字一定是
xxxx.....xx0
xxxxx...xx1
在做AND , 所以最後一位數一定是0, 那就可以把它丟棄了往下找(?)
以shift解法來看,做到兩個人一樣,再去看它往右了幾位,移回去就是。
右邊的bit 一定都是零!
int rangeBitwiseAnd(int left, int right) {
int count = 0;
while (left != right)
{
left>>=1;
right >>=1;
count ++;
}
return left << count;
}
另一種解法行數很少, 但體感(?)比較慢
也是相鄰差一的概念,一直把自己&自己減一,直到達到left這樣。
有一種費伯那契感,但我想這個應該有加速的方法吧?!(thinking 圖)
int rangeBitwiseAnd(int left, int right) {
while (left < right)
right = right & (right-1);
return left & right;
}
沒有留言:
張貼留言