1. 程式人生 > >[科技部與你共成長] 判斷陣列中是否有重複元素

[科技部與你共成長] 判斷陣列中是否有重複元素

給定一個長度為N的陣列,其中每個元素的取值範圍都是1到N。判斷陣列中是否有重複的數字。(原陣列不必保留) 這個題有多種方法,想想看~~~

---------------------------------------------------------------------------------------------------

答案:

方法1.
對陣列進行排序(快速,堆),然後比較相鄰的元素是否相同。
時間複雜度為O(n+logn),空間複雜度為O(1)。

方法2.
使用bitmap方法。
定義長度為N/8的char陣列,每個bit表示對應數字是否出現過。遍歷陣列,使用 bitmap對數字是否出現進行統計。
時間複雜度為O(n),空間複雜度為O(n)。

方法3.
遍歷陣列,假設第 i 個位置的數字為 j ,則通過交換將 j 換到下標為 j 的位置上。直到所有數字都出現在自己對應的下標處,或發生了衝突。
時間複雜度為O(n),空間複雜度為O(1)。