题解 | #子数组的最大累加和问题#
子数组的最大累加和问题
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; } }