Dies wurde in Microsoft-Vor-Ort-Interview gefragt.Effiziente Methode zum Zählen von Vorkommen eines Schlüssels in einem sortierten Array
Zählen Sie die Anzahl der Vorkommen eines bestimmten Schlüssels in einem Array.
Ich antwortete lineare Suche, weil die Elemente im Array verstreut sein können. Angenommen, der Schlüssel befindet sich am Anfang und am Ende. So müssen wir das gesamte Array scannen.
Als nächstes fragte er, was, wenn das Array sortiert ist?
Dachte für eine Weile und sagte, ich werde lineare Suche wieder verwenden. Weil die Wiederholungen des Schlüssels, falls vorhanden, irgendwo im Array sein können. Als eine Optimierung habe ich auch gesagt, wenn erste und letzte Array-Elemente gleich sind, können Sie die Array-Länge als Antwort nehmen.
Ist meine Analyse in beiden Fällen korrekt?
Beispiel:
Input = [0 0 1 1 1 2 2 3 3], key = 1, Answer = 3
Input = [0 0 2 2 3 3], key = 1, Answer = 0
Was ist, wenn alle Zahlen in der Liste enthalten sind X? Dann wird dies zu O (N) degenerieren. Die Lösung besteht darin, eine leicht modifizierte binäre Suche zu verwenden, die immer die rechte Grenze nach links verschiebt, wenn Sie den gesuchten Wert haben. Dies wird das erste Auftreten in logarithmischer Zeit finden. Dann mach das gleiche, verschiebe aber die linke Grenze für das letzte Vorkommnis nach rechts. – marcog
marcog - Ist Ihr Ansatz der gleiche wie bei codaddict? – Edward
@Edward ja, es ist – marcog