问题描述:
解题思路:
采用动态规划思路,定义已num[i]结尾的最大子数组的和为dp[i],转移方程为:
dp[i] = Math.max(nums[i],nums[i]+dp[i-1]) 。然后遍历dp数组,找出最大值。该值为nums的最大子数组和。
题解:
class Solution {
public int maxSubArray(int[] nums) {
int p = nums.length;
int[]dp = new int[p];
//base case
dp[0] = nums[0];
for(int i = 1;i<p;i++){
dp[i] = Math.max(nums[i],nums[i]+dp[i-1]);
}
int res = Integer.MIN_VALUE;
for(int i = 0;i<dp.length;i++){
if(res<dp[i]){
res = dp[i];
}
}
return res;
}
}