Finden Sie das erste Element strikt kleiner als einen Schlüssel in einem Vektor, der in absteigender Reihenfolge sortiert ist

8

Ich verstehe, dass diese Aufgabe mit der Funktion find_if () STL-Algorithm wie folgt durchgeführt werden kann:

%Vor%

Allerdings muss das Ergebnis in logarithmischer Zeit erhalten werden. Da der Vektor bereits in absteigender Reihenfolge sortiert ist, möchte ich einen binären Suchansatz verwenden.

Ich verstehe, dass die STL-Algorithmusfunktion lower_bound und upper_bound eine logarithmische Komplexität garantiert. Ich bin jedoch nicht in der Lage, herauszufinden, wie diese Funktionen verwendet werden, um das erste Element weniger als einen Schlüssel zu erhalten, im Gegensatz zu dem ersten Element, das größer oder gleich einem Schlüssel ist.

Zum Beispiel:

Angenommen, mein Vektorinhalt ist: 21 9 8 7 6 4

Mein Schlüssel ist: 10

Ich möchte, dass die Ausgabe 9 ist, da es das erste Element in einem Scan von links nach rechts des Vektors ist, der kleiner ist als 10 .

Jede Hilfe in dieser Hinsicht wäre sehr hilfreich!

Danke

    
Varun Rao 25.05.2017, 11:31
quelle

1 Antwort

8

Sie können den Standardalgorithmus std::upper_bound mit dem funktionalen Objekt std::greater verwenden.

Hier ist ein Beispiel, wie es gemacht werden kann.

%Vor%

Die Programmausgabe ist

%Vor%     
Vlad from Moscow 25.05.2017, 11:42
quelle

Tags und Links