找重複元素

2021-06-29 05:20:56 字數 448 閱讀 5997

一道題目:乙個大小為n的整型陣列,值的範圍是1~n-1,其中有一對元素重複,問怎麼在o(n)的時間複雜度下、不用o(n)的空間複雜度來找出重複的那個值。

這個題目最關鍵的應該是條件中的值的範圍,由於是1~n,所以用值作為下標可以遍歷從a[1]到a[n-1]。而元素值都是正數,那麼又可以在符號上動腦筋,當訪問到乙個元素時翻轉正負號,只有重複的元素作為下標才會被訪問該元素兩次,即:若a[i]==a[j],a[a[i]]==a[a[j]],那麼a[i]和a[j]就是重複的值。

int a[5] = ;

for (int i = 0; i < 5; i++)

a[abs(a[i])] *= -1;

}另外異或也是一種好方法,因為不管多少次異或,值都不會溢位,求出1~n-1全部異或的結果a,以及a[0]~a[n-1]異或的結果b,最後的答案就是a^b。

兩種方法都只要o(n),而且只用做一次迴圈。

找陣列中重複元素

題目 乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。分析 這個題目要求用 o n 的時間複雜度,這意味著只能遍歷陣列一次。同時還要尋找重複元素,很容易想到建立雜湊表來完成,遍歷陣列時將每個元素對映到雜湊表中,如果雜湊表中...

消除重複元素

程式設計題 消除重複元素 時間限制 1秒 空間限制 32768k 小易有乙個長度為n序列,小易想移除掉裡面的重複元素,但是小易想是對於每種元素保留最後出現的那個。小易遇到了困難,希望你來幫助他。輸入描述 輸入包括兩行 第一行為序列長度n 1 n 50 第二行為n個數sequence i 1 sequ...

存在重複元素

給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2 輸出 ...