Last updated
func maxSubArray(_ nums: [Int]) -> Int {
var currentSum = nums[0]
var maxSum = nums[0]
for idx in 1..<nums.count {
if currentSum < 0 { // 前面的是下降趋势,丢弃之前的
currentSum = nums[idx]
}
else {
currentSum += nums[idx]
}
maxSum = max(maxSum, currentSum)
}
return maxSum
}func maxSubArray(_ nums: [Int]) -> Int {
var dp: [Int] = Array(repeating: 0, count: nums.count)
for i in 0..<nums.count {
if i == 0 || (i > 0 && dp[i-1] <= 0) {
dp[i] = nums[i]
}
else {
dp[i] = dp[i - 1] + nums[i]
}
}
return dp.max() ?? nums[0]
}