#include<iostream>
#include<vector>
using namespace std;
class Solution {
//int dp[100002]={0};
int max2;
int pre;
public:
int maxSubArray(vector<int>& nums) {
// for(int i=0;i<nums.size();i++)
// {//dp思想 以下标为i的数组截止 最大的值是多少
// if(i==0)dp[i]=nums[i];
// else
// {//dp数组保证数字一定是连续取的
// //不管是取nums[i] 还是nums[i]+dp[i-1] 他们一定是连续的子数组
// dp[i]=max(nums[i],nums[i]+dp[i-1]);
// }
// }
// int max1=dp[0];
// for(int i=0;i<nums.size();i++)
// if(max1<dp[i])
// max1=dp[i];
// return max1;
for(int i=0;i<nums.size();i++)
{//从上面观察到 dp[i]只与dp[i-1]有关 那么就可以简化储存空间了
if(i==0)
{
max2=nums[0];
pre=nums[0];
}//pre表示dp[i-1]
//用max2 在dp数组创建的时候就直接比较出大小
else
{
max2=max(max(nums[i],nums[i]+pre),max2);//比较的是dp[i-1]和dp[i]的大小
pre=max(nums[i],nums[i]+pre);//pre=dp[i-1]
}
}
return max2;
}
};
int main()
{
}
剑指 Offer 42. 连续子数组的最大和
最新推荐文章于 2024-10-04 20:45:38 发布