LeetCode:13.最大子数组和
目录
1.最大子数组和
1.最大子数组和
这道题通过动态规划的思想来解决,我们首先设状态方程dp[i]表示以i位置为结尾的所有子数组中的最大和
dp[i]可以分为以下情况:
- 长度为1:nums[i]
- 长度不为1:dp[i - 1] + nums[i]
所以我们的dp[i] = max(nums[i], dp[i - 1] + nums[i])
因为dp用到了前一个位置的值,所以我们从左向右填写dp表,同时为了方便计算,可以多开一个空间,以便于计算第一个位置,因为多开了一个空间,nums[i]的映射关系就发生了变化,需要-1
class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size();vector<int> dp(n + 1);int ret = INT_MIN;for(int i = 1; i <= n; i++){dp[i] = max(nums[i - 1], dp[i - 1] + nums[i - 1]);ret = max(ret, dp[i]);}return ret;}
};