Es scheint, dass Codierungstests in Ingenieurinterviews im Ausland durchgeführt werden, und in vielen Fällen besteht die Hauptsache darin, bestimmte Funktionen und Klassen entsprechend dem Thema zu implementieren.
Als Gegenmaßnahme scheint eine Website namens Let Code Maßnahmen zu ergreifen.
Eine Site, die algorithmische Leistung trainiert, die Codierungstests standhält, über die früh gesprochen wird.
Ich denke, es ist besser, die Algorithmuskraft eines Menschen zu haben, also werde ich das Problem unregelmäßig lösen und die Methode, die ich damals dachte, als Memo aufschreiben.
Grundsätzlich möchte ich die einfache Akzeptanz in absteigender Reihenfolge lösen.
Letztes Mal Leet Code Day 9 "701. In einen binären Suchbaum einfügen" ab Null
Es hat 10 Tage gedauert, es ist unglaublich.
1431. Kids With the Greatest Number of Candies
Angesichts des Arrays "Bonbons" und der Nummer "ExtraCandies". "Süßigkeiten [i]" ist die Anzahl der Süßigkeiten, die das i-te Kind hat. Finden Sie heraus, ob es eine Möglichkeit gibt, zusätzliche Süßigkeiten an jedes Kind zu verteilen, damit es die größte Anzahl an Süßigkeiten unter sich hat.
Es ist ein wenig schwer zu verstehen, wenn es nur ein Problem ist ... Es scheint besser, sich ein aktuelles Beispiel anzusehen.
Input: candies = [2,3,5,1,3], extraCandies = 3
Output: [true,true,true,false,true]
Im Fall des allerersten Kindes, wenn Sie 2 der ursprünglichen Süßigkeiten 3 "zusätzliche Süßigkeiten" geben, ist dies 5 mal 2 + 3, und es wird mit 5 ausgerichtet, was der Maximalwert in "Süßigkeiten" ist. , Wahr. Gleiches gilt für das zweite, dritte und fünfte Kind.
Das einzige "False" ist das vierte Kind mit 3 "extraCandies", das nur 4 ist und den Maximalwert von 5 im Array nicht erreicht.
Nachdem Sie den Wert von "extraCandies" zur Nummer jedes Arrays hinzugefügt haben, vergleichen Sie ihn mit dem Maximalwert im Array. Wenn er größer oder gleich dem Maximalwert ist, ersetzen Sie "True" durch "True" und "False" durch "Candies" Wenn es sich um eine Funktion handelt, die nach dem Durchlaufen des Flusses Süßigkeiten zurückgibt, scheint die Bedingung erfüllt zu sein.
Erstens ein Beispiel für das Schreiben nur mit rekursivem und verzweigtem Schreiben
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
num = max(candies)
for i in range(len(candies)):
if candies[i] + extraCandies >= num:
candies[i] = True
else:
candies[i] = False
return candies
# Runtime: 64 ms, faster than 33.33% of Python3 online submissions for Kids With the Greatest Number of Candies.
# Memory Usage: 13.6 MB, less than 100.00% of Python3 online submissions for Kids With the Greatest Number of Candies.
Es ist super einfach. Dies ist jedoch nicht sehr schnell und ich möchte es weiter vereinfachen. In Anbetracht des Teils, der hier weggelassen werden kann, denke ich, dass der if-Zweig nach der for-Anweisung etwas redundant ist.
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
num = max(candies)
return [candy + extraCandies >= num for candy in candies]
# Runtime: 48 ms, faster than 33.33% of Python3 online submissions for Kids With the Greatest Number of Candies.
# Memory Usage: 14 MB, less than 100.00% of Python3 online submissions for Kids With the Greatest Number of Candies.
Ich werde es so umschreiben. Es ist etwas schneller.
Was auf die Rückgabe folgt, ist die Listeneinschlussnotation.
[Ausdruck für Variable im Objekt]
Es ist möglich zu schreiben.
Zusätzlich zur Einschlussnotation
Setze {Ausdruck für Variable im Objekt}
Dictionary {Schlüsselausdruck: Wertausdruck für k, v im Objekt}
Generator (Ausdruck für Variable im Objekt)
Wenn Sie interessiert sind, lesen Sie bitte die folgenden Dokumente.
Darüber hinaus gab es den folgenden interessanten Artikel über die Geschwindigkeit der Einschlussnotation. Vielleicht möchten Sie es überprüfen, wenn Sie Zeit haben.
Geschwindigkeit der Python-Listeneinschlussnotation
Recommended Posts