↓快轉到主要內容
  1. LeetCode/

LeetCode 1526: Minimum Number of Increments on Subarrays to Form a Target Array

·1 分鐘· ·
LeetCode Hard Dynamic-Programming Greedy Monotonic-Stack Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: hard 第一次嘗試:2026-07-04

  • 提交紀錄:Accepted(一次通過)

解題思路
#

把 target 想成一排高度。每次操作是把連續的一段加高 1。

從左往右看:

  • 第一格需要 target[0] 次操作。
  • 如果 target[i] <= target[i - 1],第 i 格可以直接沿用涵蓋前一格的那些操作(把它們延伸過來),不用新的。
  • 如果 target[i] > target[i - 1],多出來的 target[i] - target[i - 1] 層一定要新開操作,因為前一格只有那麼高。

所以答案是 target[0] + Σ max(0, target[i] - target[i - 1])。

我的解法
#

class Solution:
    def minNumberOperations(self, target: List[int]) -> int:
        ops = target[0]
        for i in range(1, len(target)):
            ops += max(0, target[i] - target[i - 1])   # 變高的部分要新開操作
        return ops

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 變矮的時候不用加:之前的操作在這裡停下來就好。

面試口說整理
#

把陣列想成高度,每次操作是把一段連續的加高一層。從左往右,比前一格高的部分一定要新開操作,比前一格矮或一樣,就沿用前面的操作。所以答案是第一格的高度加上所有上升的差。時間 O(n)。

相關文章

LeetCode 1537: Get the Maximum Score
·2 分鐘
LeetCode Hard Dynamic-Programming Two-Pointers Greedy Array
LeetCode 1537 解題筆記:兩個排序陣列只在共同的值可以換路;雙指針合併,兩條路各自累加,遇到共同的值時兩邊都取較大的那個再加上它
LeetCode 1793: Maximum Score of a Good Subarray
·1 分鐘
LeetCode Hard Two-Pointers Greedy Binary-Search Array Monotonic-Stack
LeetCode 1793 解題筆記:從 k 往兩邊擴張,每次往鄰居比較大的那一邊走,讓每個長度的最小值盡量大;到邊界時只能往另一邊
LeetCode 3638: Maximum Balanced Shipments
·1 分鐘
LeetCode Medium Dynamic-Programming Greedy Monotonic-Stack Array
LeetCode 3638 解題筆記:貪心,一段一旦出現比這段最大值小的數就馬上切;因為切之前的那段是非遞減的,最大值就是前一個數
LeetCode 84: Largest Rectangle in Histogram
·1 分鐘
LeetCode Daily Hard Array Stack Monotonic-Stack Dynamic-Programming Geometry Histogram
使用單調堆疊解決直方圖中最大矩形面積問題
LeetCode 1147: Longest Chunked Palindrome Decomposition
·1 分鐘
LeetCode Hard Dynamic-Programming Greedy Two-Pointers Rolling-Hash String
LeetCode 1147 解題筆記:從兩端同時往內累積字串,左右一相等就切成一對;越早切越好,剩下的中間(如果有)算一塊
LeetCode 3651: Minimum Cost Path with Teleportations
·2 分鐘
LeetCode Hard Dynamic-Programming Grid-Dp Matrix Array
LeetCode 3651 解題筆記:一層一層算傳送次數;傳送到某格的成本是上一層「值 >= 它的格子」的最小值,排序後用前綴最小值求,再跑一次右 / 下的 Grid DP