2558. Nimm Geschenke vom reichsten Stapel
Schwierigkeit:Einfach
Themen: Array, Heap (Prioritätswarteschlange), Simulation
Sie erhalten eine ganzzahlige Geschenkreihe, die die Anzahl der Geschenke in verschiedenen Stapeln angibt. Jede Sekunde machst du Folgendes:
Gib die Anzahl der nach k Sekunden verbleibenden Geschenke zurück.
Beispiel 1:
Beispiel 2:
Einschränkungen:
Hinweis:
Lösung:
Wir können einen Max-Heap (Prioritätswarteschlange) verwenden, da wir wiederholt den Stapel mit der maximalen Anzahl an Geschenken auswählen müssen. Ein Max-Heap ermöglicht es uns, in konstanter Zeit effizient auf den größten Stapel zuzugreifen und den Heap zu aktualisieren, nachdem wir Geschenke vom Stapel genommen haben.
Verwenden Sie einen Max-Heap:
Jede Sekunde verarbeiten:
Kündigung:
Lassen Sie uns diese Lösung in PHP implementieren: 2558. Nimm Geschenke vom reichsten Stapel
<?php /** * @param Integer[] $gifts * @param Integer $k * @return Integer */ function pickGifts($gifts, $k) { ... ... ... /** * go to ./solution.php */ } // Example usage: $gifts1 = [25, 64, 9, 4, 100]; $k1 = 4; echo pickGifts($gifts1, $k1) . "\n"; // Output: 29 $gifts2 = [1, 1, 1, 1]; $k2 = 4; echo pickGifts($gifts2, $k2) . "\n"; // Output: 4 ?> <h3> Erläuterung: </h3> <ol> <li> <p><strong>Heap-Initialisierung</strong>:</p> <ul> <li> SplPriorityQueue wird verwendet, um einen Max-Heap zu simulieren. Mit der Einfügemethode können wir Elemente mit Priorität in den Heap verschieben.</li> </ul> </li> <li> <p><strong>Verarbeitung des größten Stapels</strong>:</p> <ul> <li>Für k-Iterationen wird der größte Stapel mit extract extrahiert.</li> <li>Die Anzahl der zurückgelassenen Geschenke wird als Boden der Quadratwurzel des aktuell größten Stapels unter Verwendung von floor(sqrt(...)) berechnet.</li> <li>Der reduzierte Stapel wird wieder in den Haufen eingefügt.</li> </ul> </li> <li> <p><strong>Verbleibende Geschenke summieren</strong>:</p> <ul> <li>Nach den k Operationen werden alle Elemente im Heap extrahiert und summiert, um die Gesamtzahl der verbleibenden Geschenke zu erhalten.</li> </ul> </li> <li> <p><strong>Edge Cases</strong>:</p> <ul> <li>Wenn Geschenke leer sind, ist das Ergebnis 0.</li> <li>Wenn k größer als die Anzahl der möglichen Operationen ist, verarbeitet der Algorithmus dies ordnungsgemäß.</li> </ul> </li> </ol> <h3> Zeitkomplexität: </h3> <ul> <li> <strong>Heap-Operationen (Einfügen und Extrahieren)</strong>: Jede Heap-Operation (Einfügen und Extrahieren) benötigt <em><strong>O(log n)</strong></em>, wobei <em><strong>n</strong></em> ist die Anzahl der Stapel.</li> <li> <strong>Durchlaufen von k Operationen</strong>: Wir führen <em><strong>k</strong></em> Operationen durch, die jeweils Heap-Extraktion und -Einfügung beinhalten und beide <em><strong>O(log n)</strong>.</em> </li> </ul>Die gesamte Zeitkomplexität beträgt also <p><em>O(k log n)<strong></strong>, wobei </em><em>n<strong></strong> die Anzahl der Stapel ist und </em><em>k<strong></strong> ist die Anzahl der Sekunden.</em> </p> Beispielhafte Vorgehensweise: <h3> </h3>Zur Eingabe:<p> <br></p> <pre class="brush:php;toolbar:false"><?php /** * @param Integer[] $gifts * @param Integer $k * @return Integer */ function pickGifts($gifts, $k) { ... ... ... /** * go to ./solution.php */ } // Example usage: $gifts1 = [25, 64, 9, 4, 100]; $k1 = 4; echo pickGifts($gifts1, $k1) . "\n"; // Output: 29 $gifts2 = [1, 1, 1, 1]; $k2 = 4; echo pickGifts($gifts2, $k2) . "\n"; // Output: 4 ?>
Die Summe der verbleibenden Geschenke beträgt 5 8 9 4 3 = 29.
Dieser Ansatz löst das Problem mithilfe eines Max-Heaps effizient und funktioniert innerhalb der gegebenen Einschränkungen gut.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonNimm Geschenke vom reichsten Stapel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!