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。我們可以得到,當相...