題解 如何找陣列中唯一成對的那個數

2021-10-14 21:18:51 字數 759 閱讀 8641

1-1000這1000個數放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來;不用輔助儲存空間,能否設計乙個演算法實現?

根據a^a=0,a^0=a這兩條性質,我們可以把陣列中的元素全部異或起來,然後再異或一遍不重複的所有元素,就是(1^2^3^4^2)^(1^2^3^4),這樣把它們湊起來,最後結果就應該是2^2^2=2^0=2,正好是要找的重複元素

scanner cin =

newscanner

(system.in)

;int n=

1001

,sum1 =

0,sum2=0;

int[

] arr =

newint

[n];

for(

int i=

0;i1;i++

) arr[n-1]

=new

random()

.nextint

(n);

//隨機選重複的數

sum2 =sum1^arr[n-1]

;//sum2為sum1除去重複的數

int idx =

newrandom()

.nextint

(n);

//隨機選取乙個數作為隨機數的下標

system.out.

println

(sum1^sum2)

;

找出陣列中唯一成對的那個數

2.開闢輔助空間 1 1000這1000個數放在含有1001個元素的陣列中,只有唯一的乙個元素重複,其它均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助空間,能否實現?不使用輔助空間,我們可以想到的是用異或 來解決問題。異或的用法是 a0 a,aa 0。我們可以得到,當相...

唯一成對的數 演算法很美

問題 1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?解法一 顯然已經有人提出了乙個比較精彩的解法,將所有數加起來,減去1 2 1000的和。這個演算法已經足夠完美...

題1 找出唯一成對的數

1 1000這1000個數放在含有1001個元素的陣列t中,只有唯一的元素值重複,其他均只出現一次,每個陣列元素只能訪問一次,請設計乙個演算法,將重複的元素找出來,不用輔助儲存空間.一般思路 過程 建立乙個長度為n 1的arr陣列 對t陣列進行遍歷 arr t i 對arr遍歷,出現2則返回當前元素...