本题的要求显然是O(N)级的复杂度咯
结合书上的分析,可以发现如下条件:
从数组右边像左遍历,当前下标为i,那么最大值有3中情形:
1. 最大值为array[i];
2. 最大值为array[i] + maxSumInclude;
3. 最大值为不包括array[i]的maxSumExclude;
最后返回最大值: max(maxSumInclude, maxSumExclude);
相应代码如下:
是不是还可以实现得更优雅一点呢,这也就是编程之美给出的算法了:
All[0] = max{A[0], A[0] + start[1], All[1]};
A[0]表示第1个元素
start[1]表示包含元素A[1]的连续最大子数组和
All[1]表示max(start[1], All[2]);
实际上start[1]对应maxSumInclude,All[2]对应的是maxSumExclude
所以相应代码如下:
本文介绍了一种高效求解连续子数组最大和问题的方法,通过迭代更新最大值来降低复杂度,同时提供了简洁的代码实现。重点在于理解如何在O(N)时间内完成任务,并对算法进行了优化,使其更加优雅。

被折叠的 条评论
为什么被折叠?



