题目: 同力扣53 最大子序和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
题解思路:
方法一:动态规划
注意res=dp[0]=nums[0];
函数代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
vector<int> dp(n,0);
dp[0]=nums[0];
int res=nums[0];
for(int i=1;i<n;i++)
{
dp[i]=max(dp[i-1]+nums[i],nums[i]);
res=max(res,dp[i]);
}
return res;
}
};
精简版:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> dp(nums.size(),nums[0]);
int ans=dp[0];
for(int i=1;i<nums.size();i++)
{
dp[i]=max(dp[i-1]+nums[i], nums[i]);
ans=max(ans, dp[i]);
}
return ans;
}
};