此博客链接:https://www.cnblogs.com/ping2yingshi/p/14182013.html
子数组的最大累加和问题
题目
给定一个数组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; } }
结果