解题思路: 本题使用动态规划,
1.定义一个状态数组dp,dp[i]表示以元素nums[i]为结尾的最大和
2.dp[0]=nums[0]
3.dp[i-1]>0,说明前i-1个元素的最大和对第i个元素有贡献,则dp[i]=dp[i-1]+nums[i]
dp[i-1]<=0,则dp[i]=nums[i]
4.返回dp数组中的最大值
class Solution {
public int maxSubArray(int[] nums) {
int[] dp=new int[nums.length];
dp[0]=nums[0];
int res=dp[0];
for(int i=1;i<nums.length;i++){
// if(dp[i-1]<0){
// dp[i]=nums[i];
// }
// else{
// dp[i]=nums[i]+dp[i-1];
// }
dp[i]=dp[i-1]<0?nums[i]:nums[i]+dp[i-1];
res=Math.max(res,dp[i]);
}
return res;
}
}