求陣列中兩個不同的數

2021-10-05 14:03:52 字數 861 閱讀 2810

題目:在給定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 的兩個陣列間運算是指兩個陣列的對應元素相加。我們經常會碰到一些不同...