使用动态规划法,定义一个dp数组记录从第一个数字开始到当前数字的最大累加和。
每当前一个累加和大于0时,进行dp[i]的更新。
最后遍历dp数组,取最大的dp[i]返回。
过程可以看注释:
public int maxsumofSubarray (int[] arr) {
// write code here
int len = arr.length;
int res = 0;
//用tmp数组记录从0出发到当前数字能累加的最大数
int[] dp = new int[len];
//先初始化它
for(int i=0; i < len; i++){
dp[i] = arr[i];
}
//开始遍历
for(int i=1; i < len; i++){
//当前面已累加和大于0时,加上肯定比当前的数字大
dp[i] = (dp[i-1] > 0 ? (dp[i-1]+ arr[i]) : dp[i]);
}
//进行比较,选择出最大的累加和
for(int i=0; i < len; i++){
res = Math.max(res, dp[i]);
}
return res;
}
京公网安备 11010502036488号