Eine interessante Google-interview Algorithmus, den ich online gefunden, die erfordert, dass die lineare Zeit

So fand ich diese Google-interview-Algorithmus Frage online. Es ist wirklich interessant, und ich habe noch nicht bis kommen mit einer guten Lösung. Bitte haben Sie einen Blick und geben Sie mir einen Tipp/Lösung, es wäre toll, wenn Sie schreiben, die code in Java :).

"Design ist ein Algorithmus, der, gegeben eine Liste von n Elementen in ein array, findet alle Elemente, die mehr als n/3 mal in der Liste.
Der Algorithmus, der ausgeführt werden soll in der linearen Zeit. (n >=0 )
Sie erwartet, dass Sie Vergleiche und erreichen die lineare Zeit. Keine Vermischung/übermäßigen Raum/und verwenden Sie keine standard-lineare Zeit-deterministische Auswahl algo"

  • and don't use standard linear time deterministic selection algo sagen, was???
  • Ich bin neugierig zu wissen, wie würde man dies tun, ohne hashing. Obwohl es ein int[] zählen als hashing. Es def zählt als übermäßigen Raum.
  • Ich kann nicht denken, der eine exakte Lösung von der Fledermaus, aber ich glaube, es ist ein gut bekanntes problem, das findet alle Elemente, die mehr als n/2 mal Durchlaufen das array und mit einem trick zu finden Sie die beliebtesten element dann schauen Sie durch das array wieder zu überprüfen, wenn es erscheint, oft genug. Wenn Sie wiederholen Sie diesen Prozess und ignorieren die beliebteste element, sollte dieses problem lösen, da gibt es höchstens 2 Elemente, die mehr als n/3 mal
  • Formuliert für die drei Elemente auftreten, die mehr als n/4 mal, aber einfach zu ändern: Algorithmus-Beschreibung
InformationsquelleAutor Newbie_code | 2011-12-02
Schreibe einen Kommentar