3. 最大子序列和問題
問題描述
給定一個整數序列,找出連續的子序列,使得該子序列的和最大,並返回這個最大和。
示例
輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
原本想法
- 開始考慮用動態規劃,用備忘錄方法,但是後來發現做不下去
- 後面考慮用雙指標,但是又沒有頭緒
GPT程式碼
def max_subarray_sum(nums):
if not nums:
return 0
current_sum = max_sum = nums[0]
for num in nums[1:]:
current_sum = max(num, current_sum + num)
max_sum = max(max_sum, current_sum)
return max_sum
# 示例測試
nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_subarray_sum(nums)) # 輸出: 6
我的理解
我理解為是一種求當前連續數字的最大和的貪心演算法,序列不斷吞併下一個數字。
吞併有兩種情況,一個是加上之前的結果,另一個是不加上,區別在於之前的結果是否大於0。
current_sum = max(num, current_sum + num)
所以我覺得這裡也可以改寫如下:
if current_sum > 0:
current_sum += num
else:
current_sum = num
最終要求的是整個計算過程中的最大序列,所以用max_sum記錄下最大結果
max_sum = max(max_sum, current_sum)