2016-08-07 36 views
3

Dies ist eine Codierung Interview Frage:Studentenwahlergebnisse Auszählung

Ihre Schule eine Wahl ist, die und Sie sind mit Codierung eines Programms beauftragt, die die Ergebnisse deckt.

Sie erhalten eine Gruppe von Stimmen, wobei jede Stimme einen Kandidaten und einen Zeitstempel enthält. Geben Sie einen gegebenen Zeitstempel zurück und geben Sie die oberen N Kandidaten mit den meisten Stimmen an diesem Zeitstempel zurück. (Jeweils ausgezählt Abstimmung muss vor oder bei der gegebenen Zeitstempel)

Antwort

0

Dies ist wahrscheinlich weit von der effizienteste Weg ist, aber ich würde:

  • eine Liste candidateList erstellen jeden Kandidaten und deren jeweilige Anzahl der Stimmen enthalten, (ursprünglich 0)
  • Gehen Sie durch die Menge der Stimmen, und wenn eine Stimme die Zeitstempelanforderung erfüllt, fügen Sie 1 zu den Stimmen des Kandidaten in kandidatenliste hinzu.
  • Nachdem Sie die Menge der Stimmen durchlaufen haben, finden Sie den beliebtesten Kandidaten in Kandidatenliste (mit einem Auswahlalgorithmus), und dann über die Liste iterieren, um die Kandidaten beliebter als sie zu finden.
2

Erstellen Sie die Min Heap- und HashMap Data-Struktur, um dieses Problem zu lösen.

1. Stimmen Sie jede Stimme in HashMap (Kandidat, Stimmen).

2. Zu jeder Zeit möchten wir den N Top-Trending-Kandidaten finden, fügen Sie alle HashMap-Schlüssel (Kandidaten-Stimmen) zu dem Min-Heap mit Beschränkung der N-Größe.

3. Geben Sie alle Elemente aus dem Min-Heap zurück, wodurch der obere N-Kandidat mit den Stimmen zurückgegeben wird. (als Min-Heap den Kandidaten mit der Beschränkung auf Größe N filtern).

+0

Könnten Sie bitte erarbeiten? Wo verwendest du den Zeitstempel? Hast du irgendwann sortiert? Wie ist der min-Heap nützlich, wenn wir den Kandidaten mit den meisten Stimmen finden wollen? Auf welche Weise würdest du "all" die Schlüssel zum minHeap hinzufügen? Was wären die Werte? – Pandem1c

0

ich es tun würde pro Array

Für jedes neues Datum, das Sie lesen, Sie einen neuen Sub-Array erstellen: Sie können sagen, dass eine Abstimmung vom 9. August 2016 erhalten, für die Sie haben keine Stimmen registriert l, für John Doe soons, wie Sie eine Stimme für sagen wir John Doe registrieren. Ihr Array sollte dann wie folgt aufgebaut sein:

array ->0->date: 09/08/2016 
     ->John Doe: 1 

Da ich bei einer Wahl alle Namen sind bekannt annehmen, können wir einfach alle Kandidaten Namen in einem anderen Array speichern, die wir, wenn wir eine Schleife durch diese verwenden können ein.

Incase eine neue Stimme für John Doe zu einem anderen Zeitpunkt registriert wird, das Array wie diese

array ->0->date: 09/08/2016 
     ->John Doe: 1 
     ->1->date: 11/08/2016 
     ->John Doe: 1 

aussehen würde, wenn jemand für einen anderen persom auf einer bereits bekannten Zeitpunkt stimmt, es so

aussehen sollte
array ->0->date: 09/08/2016 
     ->John Doe: 1 
     ->Jane Doe: 1 

Hoffe das hilft. Wenn Sie Hilfe durch dieses Array-Struktur-Thingy durchlaufen möchten, haben Sie keine Angst zu fragen :)