2558。從最富有的一堆禮物中拿走
難度:簡單
主題:陣列、堆疊(優先隊列)、模擬
您將獲得一個整數陣列禮物,表示各堆禮物的數量。每一秒,您都會執行以下操作:
回傳k秒後剩餘的禮物數量.
範例1:
範例2:
約束:
提示:
解:
我們可以利用最大堆(優先隊列),因為我們需要反覆挑選禮物數量最多的堆。最大堆將使我們能夠在恆定的時間內有效地訪問最大的堆,並在從堆中取出禮物後更新堆。
使用最大堆:
每秒處理:
終止:
讓我們用 PHP 實作這個解:2558。從最富有的一堆禮物中拿走
<?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 ?>
堆初始化:
處理最大的一堆:
總結剩餘禮物:
邊緣情況:
因此,總時間複雜度為O(k log n),其中n 是堆的數量,k 是秒數。
輸入:
<?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 ?>
剩餘禮物的總和為5 8 9 4 3 = 29。
這種方法使用最大堆有效地解決了問題,並且在給定的約束下表現良好。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是從最富有的一堆禮物中拿走的詳細內容。更多資訊請關注PHP中文網其他相關文章!