以下是從破解編碼採訪問題:查找重複的元素具有有限內存
您有從1到N,其中N是最 32000所有的數字數組。數組可能有重複的條目,並且您不知道N是什麼。只有4KB的可用內存,您將如何在數組中打印所有 重複的元素?
方法簽名是
public static void checkDuplicates(int[] array)
然後將溶液解釋瞭如何使用位向量由表示每個整數作爲位來解決這一點。我的困惑是當我們運行這個方法時,它不會加載整個內存中的數組來循環它嗎?現在如果array
的大小比如說是10億(很多重複的元素),那麼這個程序就不會失敗,因爲它將整個數組加載到內存中,我們擁有的內存是32 * 2^10
位?
我認爲這個問題詢問4KB _additional_到什麼已使用的陣列。儘管我會說沒有時間限制,但即使在恆定的空間中,也應該可以這樣做,因爲您可以重複循環數組,並使用O(32k * n)時間對從1到32k的每個數進行計數。 –
但問題顯示「只有4KB的內存可用」!我同意它可以在恆定的空間中解決,但對於給定的問題陳述,解決方案只適用於數組大小爲2^10 – Kode
@tobias_k我同意tobias。 –