Problem
In C# ist IComparer<T> ein Interface: Jede Klasse, die seine Methode Compare implementiert, kann einer Sortierung sagen, welches Element zuerst kommt. Ein anderer Comparer ändert die Reihenfolge, ohne die Sortierung zu ändern.
Sortiere die Personen nach key:
name: nach Name (ordinale Zeichenreihenfolge, also Großbuchstaben vor Kleinbuchstaben) und bei gleichen Namen nach Alter.age: nach Alter, die Jüngsten zuerst, und bei gleichem Alter nach Name.
Implementiere sort_by_key(names, ages, key).
Eingabe
names, ages: Die Personen (gleiche Länge).
key: "name" oder "age".
Ausgabe
Gib die Namen in sortierter Reihenfolge zurück.
Einschränkungen
0 ≤ Anzahl der Personen ≤ 100,000
0 ≤ Alter ≤ 150
Beispiele
Eingabe:
key = "age"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Erwartete Ausgabe:
expected = ["Bo", "Lin", "Ada"]
Eingabe:
std::string key = "age";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Erwartete Ausgabe:
std::vector<std::string> expected = {"Bo", "Lin", "Ada"};
Eingabe:
string key = "age";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Erwartete Ausgabe:
string[] expected = new string[] {"Bo", "Lin", "Ada"};
Erläuterung
Bo und Lin sind beide 30 und werden nach Name vor Ada (36) einsortiert: ["Bo", "Lin", "Ada"].
Eingabe:
key = "name"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Erwartete Ausgabe:
expected = ["Ada", "Bo", "Lin"]
Eingabe:
std::string key = "name";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Erwartete Ausgabe:
std::vector<std::string> expected = {"Ada", "Bo", "Lin"};
Eingabe:
string key = "name";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Erwartete Ausgabe:
string[] expected = new string[] {"Ada", "Bo", "Lin"};
Erläuterung
Alphabetische Reihenfolge: ["Ada", "Bo", "Lin"].
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Sortiere Paare aus (name, age) statt zweier getrennter Listen.
Hinweis 2
Der gewählte Schlüssel bestimmt die Hauptordnung; das andere Feld löst Gleichstände.
Hinweis 3
Vergleiche Strings ordinal, damit Großbuchstaben vor Kleinbuchstaben stehen.
Erwartete Komplexität
Zeit O(n log n), zusätzlicher Speicher O(n)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.