问题:给定一个整数数组a[n],求在这个数组中和最大的一个连续子序列。 分析:如果已经知道在前0~k-1共k个元素中,在最大和为MaxAll[k-1], 怎么求0~k共k+1个元素的MaxAll[k]。 如果前k个元素的最大和子序列包括a[k-1],则很容易知道MaxAll[k] = max(MaxAll[k-1] + a[k], a[k])。那如果前k个元素的最大和子序列不包括a[k-1]呢?在数组后面增加一个元素,会改变数组最后面子序列的和,因此MaxAll[k] = max(MaxAll[k-1], MaxAll[k-1] + a[k], a[k])。定义EndMax[k-1]为前k个元素中包括a[k-1]的最大子序列和。则: EndMax[k] = max(EndMax[k-1] + a[k], a[k]) MaxAll[k] = max(MaxAll[k-1], EndMax[k]) 可以看出,没有必要使用两个数组,可以使用两个变量取代它们。 有了递推公式,代码就好写了: void main() { int a[] = { -3, 3, -1,-1, 4, -2, -1 }; } |
求数组最大连续子序列和
最新推荐文章于 2019-07-26 11:09:50 发布
求数组最大连续子序列和