給你一個(gè)整數(shù)數(shù)組 nums ,請(qǐng)你找出一個(gè)具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個(gè)元素),返回其最大和。
子數(shù)組 是數(shù)組中的一個(gè)連續(xù)部分。
LeetCode: https://leetcode.cn/problems/maximum-subarray/

image.png
class Solution {
func maxSubArray(_ nums: [Int]) -> Int {
if nums.isEmpty { return 0 }
// 以nums[i-1]為終點(diǎn)的局部前綴和
var presum = nums[0]
// 全局最大和
var maxsum = presum
for i in 1 ..< nums.count {
// 對(duì)于每一個(gè)新來的nums[i],要么加入前面組成連續(xù)和,要么自成一派, 看看哪種和更大;
// 其實(shí)可以看出如果前綴和已經(jīng)是負(fù)數(shù),那么自成一派更大
presum = max(presum, 0) + nums[i]
// 更新全局最大值
maxsum = max(maxsum, presum)
}
return maxsum
}
}

image.png