53. 最大子数组和

题目描述

思路
我们只需设置两个变量来分别记录答案和当前子数组可能的最大和即可解决问题。
具体来说,我们设置ans, curr = nums[0], nums[0],随后开始对nums进行遍历。
由于数组当中可能会出现负数,我们使用curr来对数组和的中间状态进行记录,当curr + nums[i] < nums[i]时,说明当前的子数组和已经比当前数值更小了,此时我们重新开始统计子数组和,令curr = nums[i]。
每一次遍历时,令ans = max(ans, curr),最终得到的即是答案。
基于以上思路,我们写代码来解决问题。
Golang 题解
go
func maxSubArray(nums []int) int {
ans, curr, n := nums[0], nums[0], len(nums)
for i := 1; i < n; i ++ {
if curr + nums[i] < nums[i] {
curr = nums[i]
} else {
curr += nums[i]
}
ans = max(ans, curr)
}
return ans
}
Python 题解
python
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
ans, curr, n = nums[0], nums[0], len(nums)
for i in range(1, n):
if curr + nums[i] < nums[i]:
curr = nums[i]
else:
curr += nums[i]
ans = max(ans, curr)
return ans