Orivel Orivel
Menue oeffnen

Implementierung eines Least Recently Used (LRU) Caches

Vergleiche Modellantworten fuer diese Programmierung-Benchmark-Aufgabe und pruefe Scores, Kommentare und verwandte Beispiele.

Bitte einloggen oder registrieren, um Likes und Favoriten zu nutzen. Registrieren

X f L

Inhalt

Aufgabenubersicht

Vergleichsgenres

Programmierung

Aufgaben-Erstellermodell

Antwortende Modelle

Bewertungsmodelle

Aufgabenstellung

Implementieren Sie eine LRU (Least Recently Used) Cache-Klasse in Python, die die folgenden Operationen unterstützt: 1. `LRUCache(capacity)` — Initialisieren Sie den Cache mit einer positiven Ganzzahlkapazität. 2. `get(key)` — Geben Sie den Wert zurück, der dem Schlüssel zugeordnet ist, wenn er im Cache vorhanden ist, andernfalls geben Sie -1 zurück. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 3. `put(key, value)` — Fügen Sie ein Schlüssel-Wert-Paar ein oder aktualisieren Sie es. Wenn der...

Mehr anzeigen

Implementieren Sie eine LRU (Least Recently Used) Cache-Klasse in Python, die die folgenden Operationen unterstützt: 1. `LRUCache(capacity)` — Initialisieren Sie den Cache mit einer positiven Ganzzahlkapazität. 2. `get(key)` — Geben Sie den Wert zurück, der dem Schlüssel zugeordnet ist, wenn er im Cache vorhanden ist, andernfalls geben Sie -1 zurück. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 3. `put(key, value)` — Fügen Sie ein Schlüssel-Wert-Paar ein oder aktualisieren Sie es. Wenn der Cache nach dem Einfügen seine Kapazität überschreitet, verwerfen Sie den am wenigsten kürzlich verwendeten Schlüssel. Sowohl `get` als auch `put` müssen eine durchschnittliche Zeitkomplexität von O(1) aufweisen. Stellen Sie eine vollständige, in sich geschlossene Python-Implementierung bereit. Verwenden Sie nicht `functools.lru_cache` oder `collections.OrderedDict`. Sie sollten die zugrunde liegende Datenstruktur selbst implementieren (z. B. unter Verwendung einer doppelt verketteten Liste und einer Hash-Map). Fügen Sie nach Ihrer Klassendefinition eine kurze Demonstration ein, die einen LRUCache mit der Kapazität 2 erstellt und die folgenden Operationen ausführt, wobei das Ergebnis jedes `get` ausgegeben wird: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Erwartet: 10 cache.put(3, 30) # Verwirft Schlüssel 2 print(cache.get(2)) # Erwartet: -1 cache.put(4, 40) # Verwirft Schlüssel 1 print(cache.get(1)) # Erwartet: -1 print(cache.get(3)) # Erwartet: 30 print(cache.get(4)) # Erwartet: 40 ```

Bewertungsrichtlinie

Eine gute Antwort muss eine vollständige, lauffähige Python-Implementierung eines LRU-Caches bereitstellen, die alle folgenden Kriterien erfüllt: (1) Sie verwendet weder OrderedDict noch functools.lru_cache. (2) Sie erreicht im Durchschnitt O(1)-Zeit sowohl für get als auch für put, typischerweise über eine Hash-Map in Kombination mit einer doppelt verketteten Liste. (3) Die Klasse behandelt Kapazitätsgrenzen korrekt und verwirft den am wenigsten kürzlich verwendeten Eintrag. (4) Der Demonstrationscode ist enthalte...

Mehr anzeigen

Eine gute Antwort muss eine vollständige, lauffähige Python-Implementierung eines LRU-Caches bereitstellen, die alle folgenden Kriterien erfüllt: (1) Sie verwendet weder OrderedDict noch functools.lru_cache. (2) Sie erreicht im Durchschnitt O(1)-Zeit sowohl für get als auch für put, typischerweise über eine Hash-Map in Kombination mit einer doppelt verketteten Liste. (3) Die Klasse behandelt Kapazitätsgrenzen korrekt und verwirft den am wenigsten kürzlich verwendeten Eintrag. (4) Der Demonstrationscode ist enthalten und würde die erwartete Ausgabe (10, -1, -1, 30, 40) erzeugen. (5) Der Code ist sauber, gut strukturiert und angemessen kommentiert oder selbsterklärend. Teilweise Gutschrift kann für Lösungen gegeben werden, die größtenteils korrekt sind, aber geringfügige Probleme aufweisen. Lösungen, die OrderedDict verwenden oder keine O(1)-Komplexität erreichen, sollten niedriger bewertet werden. Lösungen mit Fehlern, die zu falschen Ausgaben für die Demonstration führen, sollten deutlich niedriger bewertet werden.

Antworten

Antwort A: OpenAI GPT-5.2

class _Node: __slots__ = ("key", "value", "prev", "next") def __init__(self, key=None, value=None): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): if not isinstance(capacity, int) or capacity <= 0: raise ValueError("capacity must be a positive integer") self.capacity = capacity self.map = {} # key -> _Node # Dummy head/tail to avoid edge cases. # Most-recent is right after head. Least-recent is right before tail. self.head = _Node()...

Vollstandige Antwort anzeigen

class _Node: __slots__ = ("key", "value", "prev", "next") def __init__(self, key=None, value=None): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): if not isinstance(capacity, int) or capacity <= 0: raise ValueError("capacity must be a positive integer") self.capacity = capacity self.map = {} # key -> _Node # Dummy head/tail to avoid edge cases. # Most-recent is right after head. Least-recent is right before tail. self.head = _Node() self.tail = _Node() self.head.next = self.tail self.tail.prev = self.head def _add_to_front(self, node: _Node) -> None: node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def _remove(self, node: _Node) -> None: node.prev.next = node.next node.next.prev = node.prev node.prev = None node.next = None def _move_to_front(self, node: _Node) -> None: self._remove(node) self._add_to_front(node) def _evict_lru(self) -> None: lru = self.tail.prev if lru is self.head: return self._remove(lru) del self.map[lru.key] def get(self, key: int) -> int: node = self.map.get(key) if node is None: return -1 self._move_to_front(node) return node.value def put(self, key: int, value: int) -> None: node = self.map.get(key) if node is not None: node.value = value self._move_to_front(node) return new_node = _Node(key, value) self.map[key] = new_node self._add_to_front(new_node) if len(self.map) > self.capacity: self._evict_lru() # Demonstration cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40

Ergebnis

#1 | Sieger

Siegstimmen

3 / 3

Durchschnittsscore

99
Bewertungsmodelle Google Gemini 2.5 Pro

Gesamtpunktzahl

100

Gesamtkommentar

Die Einreichung ist herausragend. Sie bietet eine korrekte, effiziente und qualitativ hochwertige Implementierung eines LRU-Caches von Grund auf. Der Code verwendet den klassischen und optimalen Ansatz einer Hashmap in Kombination mit einer doppelt verketteten Liste. Die Implementierung ist robust, verfügt über Dummy-Kopf-/Fußzeilenknoten zur Vereinfachung von Randfällen und zeigt ausgezeichnete Codierungspraktiken wie Hilfsmethoden und Typ-Annotationen. Sie entspricht vollständig allen Aufgabenanforderungen und Einschränkungen.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Die Implementierung ist vollkommen korrekt. Sie verwendet erfolgreich eine Hashmap für O(1)-Lookups und eine doppelt verkettete Liste, um die Reihenfolge der Nutzung beizubehalten. Die Logik für `get`, `put` und Eviction funktioniert einwandfrei, und der bereitgestellte Demonstrationscode liefert genau die erwartete Ausgabe.

Vollstandigkeit

Gewichtung 20%
100

Die Lösung ist vollständig. Sie bietet eine in sich geschlossene Klasse `LRUCache`, eine private `_Node`-Hilfsklasse und den exakten Demonstrationscode, der in der Aufforderung verlangt wurde. Alle erforderlichen Funktionalitäten sind implementiert.

Codequalitat

Gewichtung 20%
100

Die Codequalität ist ausgezeichnet. Sie ist gut strukturiert mit klaren Hilfsmethoden mit einzelner Verantwortung (_add_to_front, _remove usw.), die die Lesbarkeit verbessern. Die Verwendung von Dummy-Kopf-/Fußzeilenknoten ist eine ausgefeilte Technik, die die Logik der verknüpften Liste vereinfacht. Die Einbeziehung von Typ-Annotationen, `__slots__` und Eingabevalidierung für die Kapazität zeigt starke, professionelle Codierungspraktiken.

Praktischer Nutzen

Gewichtung 15%
100

Die Lösung hat einen hohen praktischen Wert. Sie bietet eine lehrbuchmäßig perfekte, effiziente Implementierung einer fundamentalen und weit verbreiteten Datenstruktur. Dieser Code könnte in realen Anwendungen verwendet werden und dient als hervorragende Referenz für den Aufbau eines LRU-Caches von Grund auf.

Befolgung der Anweisungen

Gewichtung 10%
100

Die Lösung hält sich perfekt an alle Anweisungen. Sie implementiert korrekt den LRU-Cache von Grund auf, ohne verbotene Bibliotheken wie `collections.OrderedDict` zu verwenden. Sie erreicht die geforderte durchschnittliche Zeitkomplexität von O(1) für ihre Kernoperationen und enthält die obligatorische Demonstration.

Gesamtpunktzahl

99

Gesamtkommentar

Dies ist eine ausgezeichnete Implementierung eines LRU-Caches. Die Lösung verwendet korrekt eine doppelt verkettete Liste in Kombination mit einer Hashmap, um eine durchschnittliche Zeitkomplexität von O(1) sowohl für Get- als auch für Put-Operationen zu erreichen. Der Code vermeidet verbotene Konstrukte (OrderedDict, functools.lru_cache), behandelt alle Randfälle ordnungsgemäß und liefert genau die erwartete Ausgabe. Die Verwendung von Dummy-Kopf-/Schwanz-Sentinel-Knoten ist ein sauberer Ansatz, der Randfälle eliminiert. Der Code ist gut strukturiert, verwendet __slots__ zur Speichereffizienz, enthält eine Eingabevalidierung und ist klar kommentiert. Die Demonstration entspricht exakt der erforderlichen Ausgabe.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Die Implementierung ist vollständig korrekt. Die doppelt verkettete Liste mit Dummy-Sentinels verfolgt die Aktualität korrekt, get verschiebt aufgerufene Knoten nach vorne, put behandelt sowohl Einfüge- als auch Aktualisierungsfälle, die Verdrängung entfernt den tail.prev-Knoten (LRU), und alle Demonstrationsausgaben stimmen mit den erwarteten Werten überein (10, -1, -1, 30, 40).

Vollstandigkeit

Gewichtung 20%
100

Die Lösung ist vollständig: Sie enthält die LRUCache-Klasse mit allen erforderlichen Methoden (Konstruktor, get, put), private Hilfsmethoden, die _Node-Klasse, Eingabevalidierung und den vollständigen Democode gemäß der Aufgabenstellung.

Codequalitat

Gewichtung 20%
100

Codequalität ist ausgezeichnet. Die Verwendung von __slots__ für _Node zeigt Aufmerksamkeit für Speichereffizienz. Private Hilfsmethoden (_add_to_front, _remove, _move_to_front, _evict_lru) sind gut benannt und zweckgebunden. Typ-Annotationen werden verwendet. Kommentare erklären das Design des Sentinel-Knotens. Der Code ist sauber und lesbar.

Praktischer Nutzen

Gewichtung 15%
95

Die Implementierung ist sehr praktisch. Sie enthält eine Eingabevalidierung mit einer aussagekräftigen Fehlermeldung, verwendet __slots__ für die Leistung und das Design ist erweiterbar. Die einzige geringfügige Lücke besteht darin, dass sie keine Threadsicherheit behandelt, was jedoch nicht von der Aufgabe gefordert wurde.

Befolgung der Anweisungen

Gewichtung 10%
100

Alle Anweisungen werden präzise befolgt: keine Verwendung von OrderedDict oder functools.lru_cache, O(1)-Komplexität erreicht durch Hashmap + doppelt verkettete Liste, die zugrunde liegende Datenstruktur wird manuell implementiert, und der exakte Democode aus der Aufgabe ist mit korrekten erwarteten Ausgabenkommentaren enthalten.

Bewertungsmodelle OpenAI GPT-5 mini

Gesamtpunktzahl

97

Gesamtkommentar

Diese Antwort bietet eine korrekte, effiziente und in sich geschlossene Python-Implementierung eines LRU-Caches unter Verwendung einer Hashmap und einer doppelt verketteten Liste. Sie erfüllt die erforderlichen O(1)-Operationen, behandelt Kapazität und Verdrängung korrekt und enthält die angeforderte Demonstration, die die erwarteten Ausgaben drucken würde. Der Code ist sauber und lesbar; geringfügige Probleme beschränken sich auf kleine Stilpunkte (z. B. der Name 'map' überschattet ein Builtin und es gibt keine Docstrings), aber diese beeinträchtigen die Korrektheit oder Leistung nicht.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Implementiert LRU korrekt unter Verwendung einer Hashmap + doppelt verketteten Liste. Get und Put arbeiten in durchschnittlich O(1) Zeit, die Verdrängungslogik ist korrekt und die bereitgestellte Demonstration wird die erwarteten Ausgaben liefern.

Vollstandigkeit

Gewichtung 20%
100

Alle erforderlichen Funktionen sind vorhanden: Konstruktor mit Kapazitätsvalidierung, Get- und Put-Semantik, LRU-Verdrängung bei Überschreitung der Kapazität, keine Verwendung von OrderedDict oder functools.lru_cache und die angeforderte Demonstration ist enthalten.

Codequalitat

Gewichtung 20%
90

Der Code ist gut strukturiert, klar und verwendet Dummy-Kopf-/Schwanzknoten, um Listenoperationen zu vereinfachen. Die Methoden sind klein und fokussiert. Geringfügige Stil-Anmerkungen: Der Attributname 'map' überschattet das Builtin und es gibt keine Docstrings, aber diese beeinträchtigen die Korrektheit nicht.

Praktischer Nutzen

Gewichtung 15%
90

Die Implementierung ist praktisch und für die Verwendung in echtem Code bereit: effizient, sicher (validiert Kapazität) und speichereffizient (verwendet __slots__). Würde von kleinen Ergänzungen wie Docstrings oder Unit-Tests profitieren, ist aber funktional vollständig.

Befolgung der Anweisungen

Gewichtung 10%
100

Folgt den Anweisungen genau: Verwendet keine verbotenen Bibliotheken, implementiert die erforderlichen Datenstrukturen manuell, gewährleistet O(1)-Operationen und enthält die exakte Demonstration mit erwarteten gedruckten Ergebnissen.

class Node: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): self.capacity = capacity self.cache = {} # Sentinel head and tail for the doubly linked list self.head = Node() self.tail = Node() self.head.next = self.tail self.tail.prev = self.head def _add_node(self, node): # Add a node right after the head (making it MRU) node.prev = self.head node.next = self.head.next self.hea...

Vollstandige Antwort anzeigen

class Node: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): self.capacity = capacity self.cache = {} # Sentinel head and tail for the doubly linked list self.head = Node() self.tail = Node() self.head.next = self.tail self.tail.prev = self.head def _add_node(self, node): # Add a node right after the head (making it MRU) node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def _remove_node(self, node): # Remove a node from the linked list prev_node = node.prev next_node = node.next prev_node.next = next_node next_node.prev = prev_node def _move_to_front(self, node): # Remove a node and add it back to the front (MRU) self._remove_node(node) self._add_node(node) def _pop_tail(self): # Remove and return the LRU node (the one just before the tail sentinel) if self.tail.prev == self.head: return None # List is empty lru_node = self.tail.prev self._remove_node(lru_node) return lru_node def get(self, key: int) -> int: if key not in self.cache: return -1 node = self.cache[key] self._move_to_front(node) # Mark as recently used return node.value def put(self, key: int, value: int) -> None: if key in self.cache: node = self.cache[key] node.value = value # Update value self._move_to_front(node) # Mark as recently used else: new_node = Node(key, value) self.cache[key] = new_node self._add_node(new_node) # Add new node to front if len(self.cache) > self.capacity: # Evict LRU item lru_node = self._pop_tail() if lru_node: del self.cache[lru_node.key] # Demonstration cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40

Ergebnis

#2

Siegstimmen

0 / 3

Durchschnittsscore

98
Bewertungsmodelle Google Gemini 2.5 Pro

Gesamtpunktzahl

100

Gesamtkommentar

Dies ist eine ausgezeichnete Lösung, die eine klassische, korrekte und effiziente Implementierung eines LRU Cache bietet. Der Code ist sehr gut strukturiert und verwendet eine Hilfsklasse `Node` sowie private Methoden, um die Logik der doppelt verketteten Liste zu kapseln, was die Lesbarkeit und Wartbarkeit verbessert. Es wird korrekt eine Hash-Map für O(1)-Lookups und eine doppelt verkettete Liste für O(1)-Aktualisierungen der Aktualität verwendet, wodurch die Leistungsanforderungen der Aufgabe vollständig erfüllt werden. Die Einreichung folgt allen Anweisungen perfekt, einschließlich des Verbots von Standardbibliothekshelfern und der Aufnahme der erforderlichen Demonstration, die korrekt ausgeführt wird.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Die Implementierung ist vollständig korrekt. Die Logik für `get`, `put` und `eviction` funktioniert wie erwartet. Die Verwendung einer Hash-Map für Lookups und einer doppelt verketteten Liste mit Sentinel-Knoten zur Verfolgung der Aktualität ist der Standard- und korrekte Ansatz. Der bereitgestellte Demonstration-Code erzeugt exakt die erwartete Ausgabe.

Vollstandigkeit

Gewichtung 20%
100

Die Einreichung ist vollständig. Sie bietet eine in sich geschlossene Lösung mit den Definitionen der Klassen `Node` und `LRUCache` und enthält den im Prompt geforderten spezifischen Demonstrationsblock. Alle erforderlichen Funktionalitäten sind implementiert.

Codequalitat

Gewichtung 20%
100

Die Codequalität ist ausgezeichnet. Er ist sauber, gut organisiert und leicht verständlich. Die Verwendung von privaten Hilfsmethoden für Listenoperationen ist eine großartige Designentscheidung. Variablennamen sind klar und die Verwendung von Sentinel-Head/Tail-Knoten ist eine robuste Technik, die die Logik der Listenmanipulation durch Vermeidung von Nullprüfungen vereinfacht.

Praktischer Nutzen

Gewichtung 15%
100

Die Lösung hat einen hohen praktischen Wert, da sie die Standard- und effizienteste Implementierung eines LRU-Caches darstellt. Sie erreicht korrekt die geforderte durchschnittliche Zeitkomplexität von O(1) für die Operationen `get` und `put`. Dies ist genau die Lösung, die man in einem technischen Interview oder einer realen Anwendung, in der ein solcher Cache benötigt wird, erwarten würde.

Befolgung der Anweisungen

Gewichtung 10%
100

Die Einreichung folgt allen Anweisungen perfekt. Sie implementiert den LRU-Cache von Grund auf neu, ohne die verbotenen Funktionen `functools.lru_cache` oder `collections.OrderedDict` zu verwenden. Sie enthält die angegebenen Klassennamen und Methodensignaturen und liefert den exakten Demonstration-Code wie gefordert.

Gesamtpunktzahl

98

Gesamtkommentar

Dies ist eine ausgezeichnete Implementierung eines LRU-Caches. Die Lösung verwendet korrekt eine doppelt verkettete Liste mit Sentinel-Kopf- und -Schwanzknoten in Kombination mit einer Hashmap, um eine durchschnittliche Zeitkomplexität von O(1) für beide Operationen, get und put, zu erreichen. Der Code verwendet nicht OrderedDict oder functools.lru_cache wie gefordert. Alle Hilfsmethoden sind gut benannt und logisch organisiert. Der Demonstrationscode ist vollständig und würde genau die erwartete Ausgabe (10, -1, -1, 30, 40) liefern. Der Code ist sauber, gut kommentiert und leicht verständlich. Kleiner Hinweis: Die Nullprüfung in _pop_tail ist leicht redundant, da put sie nur aufruft, wenn len(self.cache) > self.capacity, was bedeutet, dass die Liste zu diesem Zeitpunkt nie leer ist, aber es ist eine harmlose defensive Prüfung.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Die Implementierung ist vollständig korrekt. Die doppelt verkettete Liste mit Sentinel-Knoten und Hashmap implementiert korrekt O(1) für get und put. Die Eviktionslogik entfernt korrekt das LRU-Element (tail.prev) und löscht es aus der Hashmap. Die Demonstration würde exakt 10, -1, -1, 30, 40 wie erwartet liefern.

Vollstandigkeit

Gewichtung 20%
100

Die Lösung ist vollständig. Sie enthält die Node-Klasse, die LRUCache-Klasse mit allen erforderlichen Methoden (Konstruktor, get, put), alle notwendigen Hilfsmethoden und den vollständigen Demonstrationscode, der genau der Aufgabenstellung entspricht.

Codequalitat

Gewichtung 20%
95

Der Code ist sauber, gut strukturiert und angemessen kommentiert. Hilfsmethoden sind gut benannt (_add_node, _remove_node, _move_to_front, _pop_tail) und jede hat einen kurzen Docstring-Kommentar. Das einzige sehr geringfügige Problem ist die leicht redundante None-Prüfung in _pop_tail, aber dies ist eine harmlose defensive Maßnahme und beeinträchtigt die Qualität nicht wesentlich.

Praktischer Nutzen

Gewichtung 15%
95

Die Implementierung ist sehr praktisch und produktionsreif. Sie behandelt alle Randfälle korrekt, einschließlich der Aktualisierung vorhandener Schlüssel, der Eviktion bei Kapazitätsüberschreitung und dem Zugriff auf nicht vorhandene Schlüssel. Die Verwendung von Sentinel-Knoten vereinfacht die Randbedingungen. Die O(1)-Komplexität macht sie für den realen Einsatz geeignet.

Befolgung der Anweisungen

Gewichtung 10%
100

Alle Anweisungen werden genau befolgt. OrderedDict und functools.lru_cache werden nicht verwendet. Die zugrunde liegende Datenstruktur wird manuell mit einer doppelt verketteten Liste und einer Hashmap implementiert. Der Demonstrationscode entspricht genau dem, was in der Aufgabe angegeben wurde, einschließlich der Kommentare zu den erwarteten Werten und der Eviktion.

Bewertungsmodelle OpenAI GPT-5 mini

Gesamtpunktzahl

97

Gesamtkommentar

Solide und korrekte LRU-Cache-Implementierung unter Verwendung einer doppelt verketteten Liste und einer Hashmap. get und put laufen in O(1) und die bereitgestellte Demonstration wird die erwarteten Ergebnisse liefern. Kleinere Mängel: keine explizite Validierung für nicht-positive Kapazität und kleine stilistische/Typ-Hinweis-Verbesserungen könnten vorgenommen werden.

Bewertungsdetails anzeigen

Korrektheit

Gewichtung 35%
100

Die Implementierung pflegt korrekt die LRU-Reihenfolge mit Sentinel-Head/Tail, verschiebt aufgerufene Knoten nach vorne, aktualisiert bestehende Schlüssel, fügt neue Schlüssel ein und wirft das am wenigsten kürzlich verwendete Element aus, wenn die Kapazität überschritten wird. Die Demonstration liefert die erwarteten Ergebnisse.

Vollstandigkeit

Gewichtung 20%
100

Alle erforderlichen Funktionen sind implementiert: LRUCache-Klasse mit get und put, manueller doppelt verketteter Liste plus Hashmap, korrekter Eviction-Policy und einer Demonstration, die dem Prompt entspricht. Keine verbotenen Bibliotheken werden verwendet.

Codequalitat

Gewichtung 20%
90

Der Code ist klar, gut strukturiert und verwendet Hilfsmethoden für Listenoperationen. Variablennamen und Kommentare sind beschreibend. Kleinere Verbesserungen: Kapazität in __init__ validieren, Typ-Hinweise für interne Methoden hinzufügen und Docstrings für öffentliche Methoden in Betracht ziehen.

Praktischer Nutzen

Gewichtung 15%
90

Effiziente und praktische O(1)-Implementierung, die in echtem Code verwendet werden kann. Behandelt typische Fälle gut. Fehlende explizite Behandlung/Validierung für Null oder negative Kapazität ist ein kleiner praktischer Mangel.

Befolgung der Anweisungen

Gewichtung 10%
100

Befolgt Anweisungen präzise: verwendet kein OrderedDict oder functools.lru_cache, benutzt eine manuelle verkettete Liste mit einer Hashmap für O(1) Operationen und enthält die angegebene Demonstration, die die erwarteten Ausgaben erzeugt.

Vergleichsuebersicht

Fur jede Aufgabe und Diskussion wird die Endrangfolge per Richter-Rangaggregation bestimmt (Durchschnittsrang + Borda-Tie-Break). Der Durchschnittsscore wird als Referenz angezeigt.

Bewerter: 3

Siegstimmen

3 / 3

Durchschnittsscore

99
Diese Antwort ansehen

Siegstimmen

0 / 3

Durchschnittsscore

98
Diese Antwort ansehen

Bewertungsergebnisse

X f L