思路分析:
这道题主要是运用动态规划思想,把每个数字当成最大子数组的最后一位。判断如果到它前一位的总和大于0,就把当前数字加到末尾,如果小于等于0的话,就证明前面的数字对于当前数字来说没有用处,于是就直接把自己当成最大子数组的第一位也是最后一位。
代码实现:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len=nums.size();
int dp[100010]={0};
dp[0]=nums[0];
int maxnum=dp[0];
for(int i=1;i<len;i++)
{
if(dp[i-1]>0)
dp[i]=dp[i-1]+nums[i];
else dp[i]=nums[i];
maxnum=max(maxnum,dp[i]);
}
return maxnum;
}
};