//版本1 动态规划保存当前状态 版本
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int dp[30001]={0};
dp[0] = nums[0];
int max=dp[0];
for(int i=1;i<nums.size();i++)
{
dp[i] = (dp[i-1]+nums[i]) > nums[i] ? (dp[i-1]+nums[i]):nums[i];
}
for(int j=0;j<nums.size();j++)
{
if(dp[j]>max)
{
max = dp[j];
}
}
return max;
}
};
//版本二 当前值 大于0就要 否则不要 也是动态规划 不用保存状态
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int max = nums[0];
int n = nums[0];
for(int i=1;i<nums.size();i++)
{
if(n<0)
n = nums[i];
else
n +=nums[i];
if(n >max) max =n;
}
return max;
}
};
51 -算法 -LeetCode 53最大子序和 动态规划
最新推荐文章于 2022-05-14 21:54:56 发布