題目:在給定int陣列中存在著兩個不同的數字,而其他數字都存在另乙個數與它對應(相同),求出此陣列兩個不同的數字。
解法:熟悉c++位操作的同學知道一種位操作(異或)能夠消除相同的資料,規則是
1^1
=0;1
^0=1
;0^1
=1;0
^0=1
;
顯而易見,位上相同異或會置0,位上不相同會置1,所以相同的數字在進行異或時,會變為0,而對於任何數異或0都是它本身。如果將全部的數異或一次,那麼剔除的是相同的數,得到的結果也是兩個不同數的異或結果。我們知道異或的兩個數,只有咋對應位不同的時候才會得到結果1,顯然最終的結果不是0,不然整個陣列都是兩兩相對的。
如果我們根據異或結果某位為1的數給整個陣列分類,那麼就能找到這個不同的數了,原因是這兩個不同的數必然有一位是不同的。
int
func
(int arr,
int a,
int b)
while
((num^temp)==0
)//找到不同的位
temp<<1;
for(
int i=
0;i<
sizeof
(arr)
/sizeof
(int);
++i)
b=num^a;
//得到在temp位上為1的單獨的數
}
拿到題目之後,想到的解決方法是異或,但是以後就沒有思路了,看了解題思路後自己寫出的… 求陣列中的兩個最大值
手動輸入乙個儲存整數的陣列,要求輸出陣列裡面的2個最大值。例項 輸入 1,2,5,9,84,3,2 輸出 84,9 手動輸入乙個儲存整數的陣列,要求輸出陣列裡面的2個最大值。例項 輸入 1,2,5,9,84,3,2 輸出 84,9 package 華為機試題 author hutongling ti...
找出一組數中兩個不同的數
1.題目描述 有乙個陣列其中只有乙個數出現了一次,其餘的數都出現了兩次,請找出這乙個數。思路 看到這個題我們不難想出利用異或,我們知道兩個相同的數異或結果為0,而0異或任何數結果是任何數。所以來看 define crt secure no warnings 1 include include int...
python中兩個不同shape的陣列間運算規則
宣告 本部落格討論的陣列間運算是指四則運算,如 a b a b a b a b,不包括 a.dot b 等運算,由於 numpy 和 tensorflow 中都遵循相同的規則,本部落格以 numpy 為例。眾所周知,相同 shape 的兩個陣列間運算是指兩個陣列的對應元素相加。我們經常會碰到一些不同...