最大子数组问题—— 时间复杂度=0(n)
什么是最大子数组?
最大子数组就是连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。最大子数组是很多问题的抽象,比如购买股票。如果把相邻两天的股价之差作为数组元素,那么求在连续的某个时间段内买入股票的最佳时间和卖出股票的最佳时间就可以抽象为计算最大子数组的问题。
O(n)复杂度算法分析
设计一个非递归、线性时间复杂度的算法。
- 思想 :从数组的左边界开始,由左至右处理,记录目前为止已经处理过的最大子数组。若已知A[1…j]的最大子数组,基于如下性质将解拓展为A[i…j+1]的最大子数组:A[i…j+1]的最大子数组要么是A[1…j]的最大子数组,要么是某个子数组A[i…j+1](1<=i<=j+1)。在已知A[1…j]的情况下,可以在线性时间内找出形如A[i…j+1]的最大子数组。
-
伪代码 ;
-
证明 ;