Sie können das Konzept der binären Suche verwenden, um den Anfangs- und Endindex zu finden:
Beachten Sie, dass wir, wenn wir ein Array der Größe 1 erreicht haben, eine Zelle neben der Eingabe-Nummer sein können, also prüfen wir, ob sie gleich der Eingabe-Nummer ist. Wenn nicht, fixieren wir den Index, indem wir 1 aus dem Index addieren wir haben gefunden.
%Vor%Und das ganze Verfahren:
%Vor%Die Lösung besteht darin, das Array gleichzeitig zu durchsuchen (muss nicht gleichzeitig sein: P). Der Schlüssel ist, dass die Suche nach links und rechts leicht unterschiedlich ist. Für die rechte Seite, wenn Sie einen Betrogenen treffen, müssen Sie nach rechts suchen, und für die linke Seite, wenn Sie einen Betrogenen treffen, suchen Sie nach links. Was Sie suchen, ist die Grenze, also auf der rechten Seite, nach der Sie suchen.
%Vor%Dies ist die Grenze und auf der linken Seite suchen Sie nur nach der Grenze in der entgegengesetzten Richtung. Am Ende geben Sie die Indizes der Grenzen zurück.
Doppelte binäre Suche. Du beginnst mit niedrigerem Index = 0, oberem Index = Länge - 1. Dann überprüfst du den Punkt halbwegs und stellst deine Indizes entsprechend ein.
Der Trick ist, dass, sobald Sie ein Ziel gefunden haben, der Drehpunkt sich in zwei Drehpunkte aufteilt.
Da noch niemand einen funktionierenden Code veröffentlicht hat, werde ich einige (Java) posten:
%Vor%