题解 | #子数组的最大累加和问题#

子数组的最大累加和问题

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;
    }
}
全部评论

相关推荐

牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务