LeetCode 🟡 2530. Maximal Score After Applying K Operations
🔗 🟡 2530. Maximal Score After Applying K Operations 1386
tags: Weekly Contest 327
陣列(Array)
貪心(Greedy)
堆積(Heap)
題意
給定一個下標從 開始的整數陣列 和一個整數 。你的 起始分數 為 。
在每次 操作 中:
- 選擇一個索引 使得 ,
- 將你的 分數 增加 ,並且
- 將 替換為 。
返回在 恰好 執行 次操作後你能獲得的最大可能 分數。
向上取整函數 是不小於 的最小整數。
約束條件
思路:貪心(Greedy) + 堆積(Heap)模擬
為了獲得最大可能分數,我們可以基於 貪心(Greedy) 思路,每次選擇當前陣列中最大的元素進行操作。
而為了快速獲取當前陣列中最大的元素,我們可以使用 堆積(Heap) ,透過維護一個 最大堆積(Max Heap) 使得我們可以快速獲取當前最大的元素。
在每次操作時,我們將當前最大的元素取出,並將其加入到總分中,然後將其替換為 ,並將其重新插入堆積中。
值得注意的是,由於 為整數,因此 等價於 ,即 的整數部分。
此外,Python
中的 heapq
會維護一個最小堆積,因此我們需要將元素取反,以維護一個最大堆積。
複雜度分析
- 時間複雜度:,其中 為陣列長度。
- 初始化堆積需要 的時間複雜度。
- 每次操作需要 的時間複雜度,總共執行 次。
- 空間複雜度:,其中 為陣列長度。
- 需要額外的 空間來維護堆積。
1 | class Solution: |
1 | class Solution { |
寫在最後
Cover photo is remixed from @吃肥皂泡泡, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus