乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
//num1,num2分別為長度為1的陣列。傳出引數
//將num1[0],num2[0]設定為返回結果
//先用亦或,相同則為0,不同則為1,最後得到的就是單獨的2個數的亦或,是2個數不同的位置,
//選第乙個1的位置,將陣列分為2組,則2個數分到不同組,相同的數分到相同組,則可以在分好的組裡找到
//結果
public
class
solution
if(array.length==2)
int res =0;
for(
int i=
0;i)int index =0;
while
((res &1)
==0)for
(int i=
0;i)else
}return;}
}
先用^ 亦或,相同為0,不同為1,得到2個不同的數的亦或結果,這個結果每一位1都是代表了這兩個數的不同。
右移index位找到結果第乙個1,以此為標記位,把陣列分為2部分
如果當前數右移index也為1,則分為1,如果為0,則分為2,這樣不同的那兩個數分就到了不同的組裡,而相同的數還會分到相同的組,在每個組裡再次迴圈亦或,得到的數就是那個不同的數
注意,因為並不知道每個分組裡有多少數,所以建立陣列來存是不對的,其實不用先都存下來再亦或,而是用乙個數來存就可以了。因為每次也是在之前的結果上進行亦或。
和亦或相關的操作,初始值先設為0,這樣0還是0,1還是1
陣列中只出現一次的數
首先看看題目要求 陣列 a中,除了某乙個數字 x之外,其他數字都出現了三次,而 x出現了一次。請給出最快的方法找到x。這個題目非常有意思,在本人部落格中有 位操作基礎篇之位操作全面總結 這篇文章介紹了使用位操作的異或來解決 陣列中其他數字出現二次,而x出現一次,找出x。有 這邊文章介紹了分組異或的方...
陣列中只出現一次的數
題目1 乙個陣列中,除了某乙個只出現過一次的數字外,其餘數字均出現過2次,找出這個只出現了一次的數字。思路 分析題幹,發現強調了陣列中數字出現的次數為1和2,則可以想到異或運算,兩個相同的數字異或結果為0,相同的數異或的結果為其本身,且異或運算存在交換律和結合律,即a b a b,b a a b。那...
陣列中只出現一次的數
題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。思路 首先 位運算中異或的性質 兩個相同數字異或 0,乙個數和0異或還是它本身。當只有乙個數出現一次時,我們把陣列中所有的數,依次異或運算,最後剩下的就是落單的數,因為成對兒出現的都抵消了。依照這個思路...