53. 最大子数组和
算法
-
定义状态:
- 用变量
last表示以当前元素结尾的最大子数组和 - 用变量
res表示全局最大子数组和
- 用变量
-
状态转移方程:
- 对于每个元素
num,当前的last值可以由以下两种情况决定:- 单独包含当前元素:如果此前的
last为负数,则舍弃 - 包含当前元素并延续之前的子数组:如果此前的
last为正数,则将当前元素加入子数组
- 单独包含当前元素:如果此前的
- 状态转移方程:
last = max(num, last + num)
- 对于每个元素
-
更新全局最大值:
- 在遍历每个元素后,更新全局最大值
res为:res = max(res, last)
- 在遍历每个元素后,更新全局最大值
复杂度分析
时间复杂度
- 单次遍历:仅需遍历数组一次,时间复杂度为
O(n)
空间复杂度
- 只使用了
res和last两个变量,空间复杂度为O(1)
C++ 代码
|
|
Python 代码
|
|
Go 代码
|
|
JavaScript 代码
|
|