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

LeetCode 3788: Maximum Score of a Split

·1 分鐘· ·
LeetCode Medium Prefix-Sum Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2025-12-28

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

解題思路
#

分割點 i 的分數是 prefixSum(i) - suffixMin(i + 1),兩個量都可以預先算好(Prefix Sum 模板二):

  • 後綴最小值 suf_min[i] = min(nums[i..n-1]),從右往左建。
  • 前綴和邊掃邊加。

數字可能是負的,答案也可能是負的,所以初始值要用 -inf。

我的解法
#

我當時把兩個陣列的名字取反了(prefix_min 其實是前綴和),而且後綴陣列是反著存的。這裡整理成:

class Solution:
    def maximumScore(self, nums: List[int]) -> int:
        n = len(nums)
        suf_min = nums[:]
        for i in range(n - 2, -1, -1):
            suf_min[i] = min(suf_min[i + 1], nums[i])
        best, prefix = -inf, 0
        for i in range(n - 1):
            prefix += nums[i]
            best = max(best, prefix - suf_min[i + 1])
        return best

複雜度
#

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

要特別避免的錯誤
#

  • 答案可能是負的,初始值不能用 0。
  • i 最多到 n - 2,右邊不能是空的。

面試口說整理
#

分數是左邊的前綴和減右邊的最小值。我先從右往左建後綴最小值,再從左往右累加前綴和,每個分割點算一次取最大。時間 O(n)。

相關文章

LeetCode 1423: Maximum Points You Can Obtain from Cards
·1 分鐘
LeetCode Medium Sliding-Window Prefix-Sum Array
LeetCode 1423 解題筆記:從兩端拿 k 張,等於中間留下連續 n - k 張;用固定長度視窗找留下來的最小和
LeetCode 2391: Minimum Amount of Time to Collect Garbage
·1 分鐘
LeetCode Medium Prefix-Sum String Array
LeetCode 2391 解題筆記:撿垃圾時間就是垃圾總數;每台車只要開到自己那種垃圾的最後一間,路程用前綴和
LeetCode 3494: Find the Minimum Amount of Time to Brew Potions
·1 分鐘
LeetCode Medium Simulation Prefix-Sum Array
LeetCode 3494 解題筆記:每瓶藥先往前推出最後一位巫師的完成時間(每個人都要等自己有空),再往回扣出每位巫師的完成時間
LeetCode 2874: Maximum Value of an Ordered Triplet II
·1 分鐘
LeetCode Medium Prefix-Sum Array
LeetCode 2874 解題筆記:枚舉中間的 j,左邊取前綴最大、右邊取後綴最大;也可以一次掃描維護最大值和最大差
LeetCode 1248: Count Number of Nice Subarrays
·2 分鐘
LeetCode Medium Sliding-Window Prefix-Sum Hash-Table Array
LeetCode 1248 解題筆記:「剛好 k 個奇數」不單調,改成「最多 k 個」減「最多 k - 1 個」;或用前綴和 + 雜湊表
LeetCode 3070: Count Submatrices with Top-Left Element and Sum Less Than k
·1 分鐘
LeetCode Medium Array Matrix Prefix-Sum
LeetCode 3070 解題筆記:包含左上角的子矩陣就是二維前綴和 P[i][j],數有幾個 <= k