找陣列中重複元素

2021-06-25 19:12:09 字數 520 閱讀 8045

題目:

乙個大小為n的陣列,裡面的數都屬於範圍[0, n-1],有不確定的重複元素,找到至少乙個重複元素,要求o(1)空間和o(n)時間。

分析:這個題目要求用

o(n)

的時間複雜度,這意味著只能遍歷陣列一次。同時還要尋找重複元素,很容易想到建立雜湊表來完成,遍歷陣列時將每個元素對映到雜湊表中,如果雜湊表中已經存在這個元素則說明這就是個重複元素。

但是題目卻在空間複雜度上有限制——要求為

o(1)

的空間。因此採用雜湊表這種解法肯定在空間複雜度上是不符合要求的。

下面給出找出所有重複元素的**:

int repeat(int *a, int n)

else

} else // 此時|a[i]|代表的值已經出現過一次了

else

}} return -1;//陣列中沒有重複的數

}void main()

; repeat(a,10);

}

找重複元素

一道題目 乙個大小為n的整型陣列,值的範圍是1 n 1,其中有一對元素重複,問怎麼在o n 的時間複雜度下 不用o n 的空間複雜度來找出重複的那個值。這個題目最關鍵的應該是條件中的值的範圍,由於是1 n,所以用值作為下標可以遍歷從a 1 到a n 1 而元素值都是正數,那麼又可以在符號上動腦筋,當...

去除陣列中重複元素

統計乙個一維陣列中的各個元素的個數,然後刪除多出來的重複元素,並輸出結果。例如 1,2,2,2,3,3,3,3,3 1,2,3 將重複元素的列表中的重複元素進行統計,並將統計結果放在dictionary中,key為元素,value為該元素的個數 然後通過for獲取key,得到乙個新的列表,就是沒有重...

返回陣列中不重複元素

本文內容為學習了司徒正美的部落格 後整理總結部分內容而得 總結兩種思路的解決方式。解決思路一 如下 var ret span span strong span b var norepeat function array else return set.replace g,split alert no...