1-1000這一千個數放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來;不用輔助儲存空間,能否設計乙個演算法實現?
解題思路:由於每個元素只能訪問一次,所以不能使用雙重for迴圈暴力求解,不能使用輔助空間所以也不能使用木桶排序的思想,所以我們採用位運算中的異或運算求解
基礎知識
a^0=aa^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的和。這個演算法已經足夠完美...