public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];//创建存储最大和的数组
dp[0] = nums[0]; //设置初始值
int max = dp[0]; //设置最大和初始值
//转移方程
for(int i = 1;i<nums.length;i++){
if (dp[i-1]>0){
dp[i] = dp[i-1]+nums[i];
}else {
dp[i] = nums[i];
}
if (dp[i] > max){
max = dp[i];
}
}
return max;
}
//空间优化、空间复杂度O(N)降为O(1)
public int maxSubArray(int[] nums) {
// 不创建存储最大和的数组而是在原来数组基础上改
int max = nums[0];
//转移方程
for(int i = 0;i<nums.length;i++){
nums[i] = nums[i] + Math.max(nums[i-1], 0);
max = Math.max(num[i],max);
}
return max;
}