題1 找出唯一成對的數

2022-08-31 10:39:10 字數 979 閱讀 8747

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

一般思路:

過程:建立乙個長度為n+1的arr陣列——>對t陣列進行遍歷(arr[ t[ i ] ]++)——>對arr遍歷,出現2則返回當前元素。

由題可知資料的範圍內是1~1000,而且是連續的,這樣我們可以利用陣列下標的特性,建立乙個長度為n+1的陣列,其下標為元素值,進行統計。如果統計次數等於2說明該下標對應的元素是重複的

位運算思路:

過程:對t陣列進遍歷——》遍歷的同時每個元素進行異或———》將異或的結果再次與1~1000異或————》所得的結果為重複的值

但是由於不能使用輔助空間,所以考慮位運算中 異或 ^ 的特點,a^a=0  a^0=a   ,也就是說,兩個相同的數字進行異或結果為0,可以用來消除重複。 可惜,題目要求尋找重複的值,所以,我們對這

1001個數字 加上(1~1000)這1000個數字,這樣1~1000所有的數字出現了2次,可以消除,而那個重複的數字由於加了一次,變成了3次,a^a^a =a.。從而得出那個重複的a。 

一般思路**:

//

一般思路

public

static

int f1(int

t)

//遍歷arr陣列,返回出現次數為2的下標

for(int i=0;i)

}return

res;

}

位運算思路**:

//

位運算方法

public

static

int f2(int

t)

//在與1~1000異或

for(int i=1;i<=1000;i++)

return

res;

}

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

1 1000這一千個數放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?解題思路 由於每個元素只能訪問一次,所以不能使用雙重for迴圈暴力求解,不能使用輔助空間所以也不能使用木桶...

唯一成對的數 演算法很美

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

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

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