描述
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
时间复杂度为O(n)O(n)O(n),空间复杂度为O(1)O(1)O(1)
示例1
输入:
[1, -2, 3, 5, -2, 6, -1]
返回值:
12
备注:
1≤N≤1051 \leq N \leq 10^51≤N≤105 ∣arri∣≤100|arr_i| \leq 100∣arri∣≤100
动态规划问题,说实话我不会
从前开始加,累加和为0或者小于0则舍掉,则说明无意义或是负作用,重新开始加。
class Solution:
def maxsumofSubarray(self , arr ):
# write code here
sum = arr[0]
presum = 0
for tmp in arr:
if presum < 0:
presum = tmp
else:
presum += tmp
sum = max(presum, sum)
return sum