日期:2026年11月14日
LeetCode 題目連結:3364. Minimum Positive Sum Subarray
解題想法
簡單題。題目給一個長度為 $n$ 的整數陣列 $nums$,兩個整數 $l, r$,要找出大於 0 的子陣列加總的最小值,子陣列長度 $length ~(l \leq length \leq r)$。我先計算 $nums$ 的前綴和 $psum$,再用雙層 for 迴圈測試所有可能的右端點 $i$ 及子陣列長度 $d$ 找答案,時間複雜度為 $O(n^2)$,因為這題的 $n$ 不大,速度很快。
Python 程式碼
Runtime: 9 ms, beats 97.54%. Memory: 19.16 MB, beats 87.19%.
class Solution:
def minimumSumSubarray(self, nums: List[int], l: int, r: int) -> int:
n = len(nums)
# 1. 計算 nums 的前綴和
psum = [0] + nums[:]
for i in range(1, n+1):
psum[i] += psum[i-1]
# 2. 用雙層 for 迴圈測試所有可能的右端點及子陣列長度找答案
ans = float('inf')
for i in range(l, n+1):
for d in range(l, min(i, r) + 1):
isum = psum[i] - psum[i-d]
if isum > 0 and isum < ans:
ans = isum
return ans if ans < float('inf') else -1