找出唯一成對的數(異或運算)

2021-10-24 14:48:33 字數 1158 閱讀 6262

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

解題思路:由於每個元素只能訪問一次,所以不能使用雙重for迴圈暴力求解,不能使用輔助空間所以也不能使用木桶排序的思想,所以我們採用位運算中的異或運算求解

基礎知識

a^0=a

a^a=0

int x =0;

for(

int i =

1; i <= arr.length-

1; i++

)for

(int i =

0; i < arr.length; i++

)system.out.

println

(x);

第乙個for迴圈將陣列中的元素以^的形式排列起來

arr=[1

,2,3

,2,4

]第乙個for迴圈結束後x等價於0^1

^2^3

^2^4

第二個for迴圈相當於把x中相同的數字消去 且每個數字只消去一次 最終只留下多餘的乙個數

0^1

^2^3

^2^4

^1==0

^2^3

^2^4

0^1^

2^3^

2^4^

2==0^

3^2^

40^1

^2^3

^2^4

^3==0

^2^4

0^1^

2^3^

2^4^

4==0^

2==2

使用乙個額外的相同大小的陣列計數,以原陣列的陣列元素作為額外陣列的下標,沒當原陣列內元素出現,額外的陣列下標對應的元素加1 最後檢視額外陣列中哪個元素為2 輸出下標即為成對數

for

(int i =

0; i < arr.length; i++

)for

(int i =

0; i < arr.length; i++

)

唯一成對的數(異或的作用)

問題描述如下 1 1000這1000個數放在含有1001個元素的陣列中,只有唯一的乙個元素重複 其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?三個主要的要求 只存在唯一的乙個元素重複 只能訪問一次 不允許使用輔助儲存空間 藍橋杯備戰...

題1 找出唯一成對的數

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

唯一成對的數 演算法很美

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