Die folgende Frage ist die Codierung Interview von Cracking:Suche nach doppelten Elementen mit begrenztem Speicher
Sie haben einen Array mit allen Zahlen von 1 bis N, wobei N höchstens 32.000. Das Array kann doppelte Einträge enthalten und Sie wissen nicht, was N ist. Mit nur 4 KB Speicher verfügbar, wie würden Sie alle doppelte Elemente im Array drucken?
die Methodensignatur ist
public static void checkDuplicates(int[] array)
dann die Lösung erklärt, wie man Bitvektor verwenden können, diese zu lösen, indem jede ganze Zahl als Bit repräsentiert. Meine Verwirrung ist, wenn wir diese Methode ausführen, lädt es nicht das gesamte Array im Speicher, um es zu durchlaufen? Nun, wenn die array
Größe sagen, zum Beispiel 1 Milliarde (viele wiederholte Elemente) wird dieses Programm nicht fehlschlagen, da es das gesamte Array im Speicher lädt und der Speicher, den wir haben, 32 * 2^10
Bits ist?
denke ich, das Problem für 4KB _additional_ fragt, was bereits von der Anordnung verwendet wird. Obwohl ich sagen würde, dass ohne Zeitbeschränkungen, Sie in der Lage sein sollten, dies sogar in konstantem Raum zu tun, da Sie das Array einfach wiederholt loopen und jede Zahl von 1 bis 32k mit O (32k * n) Zeit zählen können. –
Aber das Problem lautet "Mit nur 4 KB Speicher verfügbar" !! Ich stimme zu, dass es in konstantem Raum gelöst werden kann, aber mit der gegebenen Problemaussage würde die Lösung nur funktionieren, wenn das Array eine Größe von 2^10 – Kode
@tobias_k hat. Ich stimme tobias zu. –