題目:
乙個大小為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...