Problème
En C#, un IComparer<T> est une interface : toute classe qui implémente sa méthode Compare peut indiquer à un tri quel élément vient en premier. Choisir un comparateur différent change l'ordre sans changer le tri.
Triez les personnes par key :
name: par nom (ordre lexicographique ordinal, donc les lettres majuscules viennent avant les minuscules), puis par âge lorsque les noms sont égaux.age: par âge, du plus jeune au plus âgé, puis par nom lorsque les âges sont égaux.
Implémentez sort_by_key(names, ages, key).
Entrée
names, ages: Les personnes (même longueur).
key: "name" ou "age".
Sortie
Retournez les noms dans l'ordre trié.
Contraintes
0 ≤ nombre de personnes ≤ 100,000
0 ≤ âge ≤ 150
Exemples
Entrée :
key = "age"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Sortie attendue :
expected = ["Bo", "Lin", "Ada"]
Entrée :
std::string key = "age";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Sortie attendue :
std::vector<std::string> expected = {"Bo", "Lin", "Ada"};
Entrée :
string key = "age";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Sortie attendue :
string[] expected = new string[] {"Bo", "Lin", "Ada"};
Explication
Bo et Lin ont tous deux 30 ans, donc ils sont ordonnés par nom avant Ada (36) : ["Bo", "Lin", "Ada"].
Entrée :
key = "name"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Sortie attendue :
expected = ["Ada", "Bo", "Lin"]
Entrée :
std::string key = "name";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Sortie attendue :
std::vector<std::string> expected = {"Ada", "Bo", "Lin"};
Entrée :
string key = "name";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Sortie attendue :
string[] expected = new string[] {"Ada", "Bo", "Lin"};
Explication
Ordre alphabétique : ["Ada", "Bo", "Lin"].
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Triez des paires (name, age) plutôt que deux listes séparées.
Indice 2
La clé choisie donne l'ordre principal ; l'autre champ départage les égalités.
Indice 3
Comparez les chaînes en ordre ordinal pour que les majuscules passent avant les minuscules.
Complexité attendue
temps O(n log n), espace supplémentaire O(n)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.