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

子数组的最大累加和问题

http://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd

分析:
这里需要理解
arr[i]=Math.max(arr[i],arr[i-1]+arr[i]);
举个例子理解: f(1) =( (f(0)+f(1))>f(1) )? (f(0)+f(1)) :f(1) ,简单理解也就是看前一个下标的值是否大于0,如果小于0则仍是当前下标值不变,若大于0的话 第二项(arr[1])的值为 前两项之和,如果下面有再大于0的,那么第三项就相当于前三项的和了。如果第三项比三项之和还大,那么值不变,重新累计。
max=Math.max(m,arr[i]);
这里也容易理解,就是将最大值和目前累计的值进行对比判断,大的存入max

代码:

public int maxsumofSubarray (int[] arr) {
        // write code here
        int max=0;

        //数组长度为1,直接返回第一项的值
        if(arr.length==1) return arr[0];

        for(int i=1;i<arr.length;i++){
            arr[i]=Math.max(arr[i],arr[i-1]+arr[i]);
            max=Math.max(m,arr[i]);
        }
        return max;
    }
全部评论

相关推荐

冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务