基礎演算法 位運算 找出奇特的數

2021-06-26 09:48:07 字數 619 閱讀 5074

leetcode 裡面有兩道關於找出落單的數的題: single number 和 single number ii

single number 這道題是讓找出乙個陣列裡唯一乙個落單的數,其餘的數都出現了2次

這道題首要想到的是異或,因為異或的性質中有a^a=0 0^a=a,這樣就能找出那個只出現的1次的數,其餘出現了2次的因為異或操作全部清零。

public int singlenumber(int a) 

}

這樣,每個digit陣列的元素要麼是0,要麼一定是3k或者3k+1,我們假設沒有那個落單的數,這個時候陣列的每個元素除了0,一定是3k,所以唯一造成3k+1的數就是那個落單的數,找出即可,因此只需要模上3,就可以找出那個落單的數。

for(int i=0; i<32; i++)

result|=(digit[i]%3)《附上single number ii 的完整** (作者是code_ganker)

public static int singlenumber(int a)

} for(int i=0; i<32; i++)

return result;

位運算的應用 找出落單的數

基本描述 乙個陣列裡面除了某乙個數字之外,其他的數字都出現了兩次。設計乙個演算法去找出這個只出現了一次的數字。要是沒學過位運算的話,估計又想著去暴力列舉了,不合適,資料量大了會很麻煩的,還是用位運算。因為陣列中只有乙個元素是不重複兩次的,用0去一次與陣列元素進行異或,出現兩次的數異或之後為0,只出現...

基礎演算法 位運算 基本運算

1.移動 左移n位 乘以2的n次方 右移n位 除以2的n次方 0 左移n位 在1後面加上n個0 注 0不等於1。等於11 11 x 0 正數左移右邊補0 正數右移左邊補0 負數左移右邊補1 負數右移左邊補1 移動的作用總結 乘2,除2。右n位清零 2.異或 x 0 x x x 0 x 1 x x x...

基礎演算法 12 位運算

位運算兩種簡單操作 1.求n的二進位制表示中第k位是多少。步驟 先把第k位移到最後一位 用 n k 看個位是多少n k 1 include include include include using namespace std intmain 2.返回n的最後一位1 lowbit n n n low...