Problem
Das Facade-Pattern gibt einen einfachen Einstiegspunkt in ein komplexes Subsystem. Der checkout-Aufruf eines Shops verbirgt zwei Subsysteme: den Bestand und die Preisliste.
Die Artikel sind von 0 bis n − 1 nummeriert. stock[i] ist die Anzahl der verfügbaren Einheiten von Artikel i, und prices[i] ist sein Preis. Der Warenkorb ist eine Liste von [item, quantity]-Zeilen; derselbe Artikel kann in mehreren Zeilen vorkommen.
checkout(stock, prices, cart) muss:
- Den Bestand prüfen: Wenn die Gesamtmenge eines Artikels im Warenkorb größer ist als sein Bestand, schlägt die Bestellung fehl.
- Andernfalls die Gesamtsumme des Warenkorbs zurückgeben.
Implementiere checkout_facade(stock, prices, cart).
Input
stock, prices: jeweils n Werte.
cart: [item, quantity]-Zeilen.
Output
Gib den Gesamtpreis zurück, oder -1, wenn für irgendeinen Artikel nicht genug Bestand vorhanden ist.
Einschränkungen
1 ≤ n ≤ 1,000
0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ Warenkorbzeilen ≤ 1,000; 1 ≤ quantity ≤ 1,000
Beispiele
Eingabe:
cart = [
[0, 2],
[2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]
Erwartete Ausgabe:
expected = 10
Eingabe:
std::vector<std::vector<long long>> cart = {
{0, 2},
{2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};
Erwartete Ausgabe:
long long expected = 10;
Eingabe:
long[][] cart = new long[][] {
new long[] {0, 2},
new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};
Erwartete Ausgabe:
long expected = 10;
Erläuterung
Beide Artikel sind auf Lager. 2 × 3 + 4 × 1 = 10.
Eingabe:
cart = [
[1, 1],
[1, 2]
]
stock = [5, 2]
prices = [3, 20]
Erwartete Ausgabe:
expected = -1
Eingabe:
std::vector<std::vector<long long>> cart = {
{1, 1},
{1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};
Erwartete Ausgabe:
long long expected = -1;
Eingabe:
long[][] cart = new long[][] {
new long[] {1, 1},
new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};
Erwartete Ausgabe:
long expected = -1;
Erläuterung
Artikel 1 erscheint zweimal mit insgesamt 3 Einheiten, aber nur 2 sind auf Lager, daher schlägt die Bestellung fehl: -1.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Summiere zuerst die Menge jedes Artikels über alle Warenkorbzeilen.
Hinweis 2
Vergleiche diese Summen mit dem Bestand, bevor du einen Preis berechnest.
Hinweis 3
Fehlt bei einem Artikel etwas, gib sofort -1 zurück.
Erwartete Komplexität
Zeit O(n + Warenkorbzeilen), zusätzlicher Speicher O(n)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.