Problem
LINQs Join ordnet Elemente aus zwei Folgen über einen gemeinsamen Schlüssel zu, ähnlich wie ein Datenbank-Join. Hier werden Kunden über die Kunden-ID mit ihren Bestellungen verbunden.
Kunde i hat die ID customer_ids[i] und den Namen customer_names[i]. Jede Bestellung ist [customer_id, amount].
Verbinde beide: Addiere für jeden Kunden mit mindestens einer Bestellung die Beträge seiner Bestellungen. Kunden ohne Bestellungen fallen weg, und Bestellungen mit unbekannter Kunden-ID werden ignoriert.
Implementiere join_customers_orders(customer_ids, customer_names, orders).
Eingabe
customer_ids, customer_names: Die Kunden (IDs sind verschieden).
orders: Paare [customer_id, amount].
Ausgabe
Gib "<name>:<total>" für jeden Kunden mit Bestellungen zurück, sortiert nach Summe absteigend und bei gleicher Summe nach Name (ordinale Reihenfolge).
Einschränkungen
1 ≤ Anzahl der Kunden ≤ 10,000
0 ≤ Anzahl der Bestellungen ≤ 100,000; 1 ≤ amount ≤ 10^6
Beispiele
Eingabe:
orders = [
[1, 50],
[2, 30],
[1, 20]
]
customer_ids = [1, 2, 3]
customer_names = ["Ada", "Lin", "Bo"]
Erwartete Ausgabe:
expected = ["Ada:70", "Lin:30"]
Eingabe:
std::vector<std::vector<long long>> orders = {
{1, 50},
{2, 30},
{1, 20}
};
std::vector<long long> customer_ids = {1, 2, 3};
std::vector<std::string> customer_names = {"Ada", "Lin", "Bo"};
Erwartete Ausgabe:
std::vector<std::string> expected = {"Ada:70", "Lin:30"};
Eingabe:
long[][] orders = new long[][] {
new long[] {1, 50},
new long[] {2, 30},
new long[] {1, 20}
};
long[] customer_ids = new long[] {1, 2, 3};
string[] customer_names = new string[] {"Ada", "Lin", "Bo"};
Erwartete Ausgabe:
string[] expected = new string[] {"Ada:70", "Lin:30"};
Erläuterung
Ada hat zwei Bestellungen (50 + 20 = 70) und Lin eine (30); Bo hat keine und fällt weg: ["Ada:70", "Lin:30"].
Eingabe:
orders = [
[8, 40],
[7, 40],
[9, 99]
]
customer_ids = [7, 8]
customer_names = ["Zoe", "Max"]
Erwartete Ausgabe:
expected = ["Max:40", "Zoe:40"]
Eingabe:
std::vector<std::vector<long long>> orders = {
{8, 40},
{7, 40},
{9, 99}
};
std::vector<long long> customer_ids = {7, 8};
std::vector<std::string> customer_names = {"Zoe", "Max"};
Erwartete Ausgabe:
std::vector<std::string> expected = {"Max:40", "Zoe:40"};
Eingabe:
long[][] orders = new long[][] {
new long[] {8, 40},
new long[] {7, 40},
new long[] {9, 99}
};
long[] customer_ids = new long[] {7, 8};
string[] customer_names = new string[] {"Zoe", "Max"};
Erwartete Ausgabe:
string[] expected = new string[] {"Max:40", "Zoe:40"};
Erläuterung
Beide haben 40 und werden nach Name sortiert; die Bestellung für die unbekannte ID 9 wird ignoriert: ["Max:40", "Zoe:40"].
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Summiere zuerst die Bestellbeträge pro Kunden-ID.
Hinweis 2
Gehe dann die Kunden durch und behalte die, die eine Summe haben.
Hinweis 3
Sortiere nach Summe absteigend, dann nach Name in ordinaler Reihenfolge.
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.