题目
使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知A[1..j]
的最大子数组,基于如下性质将解扩展为A[1..j+1]
的最大子数组:A[1..j+1]
的最大子数组要么是A[1..j]
的最大子数组,要么是某个子数组A[i..j+1](1≤i≤j+1)
。在已知A[1..j]
的最大子数组的情况下,可以在线性时间内找出形如A[i..j+1]
的最大子数组。
答题
用C++
语言编写的代码如下:
struct Sub {
int low;
int high;
int sum;
};