题解 | #子数组的最大累加和问题#
子数组的最大累加和问题
http://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd
思路:
- 当前面已累加和大于0时,加上肯定比当前的数字大;否则为当前元素值
- dp[i] = (dp[i-1] > 0 ? (dp[i-1]+ arr[i]) : dp[i])
import java.util.*;
public class Solution {
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
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;
}
}
查看1道真题和解析