子数组的最大累加和问题
子数组的最大累加和问题
http://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd
- 既然是用动态规划,比较直观的思路是这样的:
对于一个给定的数组arr[0...n-1].利用一个辅助的数组s[0...n-1]去存储数组arr中结尾下标为i的最大子数组。那么有if(s[i-1]<=0) s[i] = arr[i];
else s[i] = s[i-1]+arr[i];
这样只需要在最后求s[i]的最大值即可。 - 但是这样空间复杂度为O(n),为了满足题目要求,发现其实这个辅助的数组s[i]只与s[i-1],也就是我们循环的当前值有关,所以只需要用一个变量去存储这个值即可。最终代码如下:
int maxsumofSubarray(int* arr, int arrLen ) {
// write code here
int cursor = arr[0];
int max = cursor;
for(int i=1;i<=arrLen-1;i++){
if(cursor<=0) cursor = arr[i];
else cursor = arr[i]+cursor;
if(max<=cursor) max = cursor;
}
return max;
}