Längste subarray, deren Elemente bilden eine kontinuierliche Abfolge

Gegeben ein unsortierter array von positiven ganzen zahlen, die Länge der längsten subarray, deren Elemente, wenn Sie sortiert sind kontinuierlich. Können Sie sich vorstellen wie ein O(n) Lösung?

Beispiel:

{10, 5, 3, 1, 4, 2, 8, 7}, Antwort ist 5.

{4, 5, 1, 5, 7, 6, 8, 4, 1}, Antwort ist 5.

Für das erste Beispiel, das subarray {5, 3, 1, 4, 2} wenn sortiert werden kann, bilden eine kontinuierliche Folge 1,2,3,4,5, die die längste.

Für das zweite Beispiel, das subarray {5, 7, 6, 8, 4} ist das Ergebnis subarray.

Ich denken kann, eine Methode, die für jedes subarray, überprüfen Sie, ob (maximum - minimum + 1) ist gleich der Länge des subarray, wenn das stimmt, dann ist es eine kontinuierliche subarray. Nehmen Sie die längste von allen. Aber es ist O(n^2) und nicht umgehen können mit Duplikaten.

Kann jemand gibt eine bessere Methode?

  • Dürfen Sie zum ändern der array? Wie viel zusätzlicher Speicherplatz zur Verfügung steht?
  • Sie haben keine Gründe zu glauben, es gibt eine O(n) Lösung? (+1)
  • Eigentlich ist es eine interview-Frage.
  • Keinen Platz begrenzen.
  • Was sind die Einschränkungen für die Werte der ganzen zahlen im array? Wenn es keine, ich würde Wetten auf: es ist unmöglich zu tun, dass die Komplexität in weniger als O(n*log(n))
  • Ich denke, wir sollten einige Umsetzung-stapeln oder/und in Warteschlangen zu speichern, die max-min-Elemente von subarray. Dies ist ein gängiger Ansatz für O(n) algorithmen mit arrays und subarrays
  • Positiv, keine weiteren Einschränkungen.
  • Welche Annahmen sind zulässig in Bezug auf Duplikate? Ist es sicher, anzunehmen, dass jede ganze Zahl tritt höchstens einmal?
  • Es kann ganze zahlen mehr als einmal vorkommen. Ich habe den Beitrag editieren zu geben noch ein Beispiel für Dubletten.
  • Können Sie bitte definieren Sie "subarray"? Muss es zusammenhängend in das original-array?
  • Ich denke, es muss zusammenhängend sein, wie vorgeschlagen, durch das Beispiel mit den Duplikaten
  • Ist ein subarray, das Duplikate enthält, erlaubt? E. g. für die Eingabe 3 1 1 2 5 können wir ein subarray von der Länge 4 1 1 2 3?
  • Nein, die Antwort für dein Beispiel wäre 2 für die subarray {1, 2}

InformationsquelleAutor shilk | 2013-04-12
Schreibe einen Kommentar