题目描述
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
思路:题目很简单。先用sum保存第一个值,然后循环遍历数组,当sum+arr[i]<sum时,则跳过这个arr[i],否则计入。
public class Solution {
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxsumofSubarray (int[] arr) {
// write code here
int sum=arr[0];
for(int i=1;i<arr.length;)
{
if((sum+arr[i])<sum) i++;
else
{
sum+=arr[i];
i++;
}
}
return sum;
}
}