子数组的最大累加和问题

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14182013.html

子数组的最大累加和问题

题目链接:https://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd?tpId=188&&tqId=36864&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

题目

给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
 
示例1

输入

[1, -2, 3, 5, -2, 6, -1]

返回值

12

题解

从前向后遍历数组,每加一个新的数时,需要判断和是否大于0,如果和大于0表示可以累加,因为两个正数相加的话肯定是大于0的,每次得到大于0的和就可以把数组中的值修改了,因为数组相加不能跳着相加是按照顺序相加的,所以当和大于0时,可以修改数组中的当前值,因为再向后面判断。

代码

import java.util.*;


public class Solution {
    /**
     * max sum of the subarray
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxsumofSubarray (int[] arr) {
        if(arr==null||arr.length<1){
            return 0;
        }
        int max=arr[0];
        for(int i=1;i<arr.length;i++){
           if((arr[i]+arr[i-1])>0){
                arr[i]=arr[i]+arr[i-1];
                max=Math.max(arr[i],max);
            }
 
        }
 
        return max;
    }
}

 

结果

 

posted @ 2020-12-23 23:16  萍2樱释  阅读(169)  评论(1编辑  收藏  举报