1. dp数组的定义
下标:包括 i 的子数组
值:包括 i 的子数组的最大和
2. 递推公式
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
dp[i - 1] + nums[i] : 表示由前面一个推到 i
nums[i] : 从现在 i 开始重新计数
3. 初始化
dp [ 0 ] = nums [ 0 ]
4. 遍历顺序
从小到大
注意:
最后的结果是在 dp 数组中,寻找最大的一个数,而不是最后一个数,因为最大子数组和 不一定包括最后一个 元素。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> dp(nums.size(),0);
dp[0] = nums[0];
int res = dp[0];
for(int i = 1; i < nums.size(); i++)
{
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
res = max(res, dp[i]);
}
return res;
}
};