第一种:
暴力枚举所有的子数组,然后比较选出最大,时间复杂度O(n^2)
第二种:
分治法,参见算法导论,时间复杂度O(nlogn)
第三种:
动态规划,时间复杂度O(n)
1、A[1..j+1]的最大子数组为:max{A[1..j] , A[i,j+1](1<=i<=j+1)最大值},用sum记录A[1..j]
2、A[i,j+1](1<=i<=j+1)最大值就是以A[j+1]结尾的最大子数组
设K[j+1]为以A[j+1]结尾的最大子数组,
K[j+1]=K[j]>0?A[j+1]+K[j]:A[j+1](以A[j+1]结尾的最大子数组肯定包含A[j+1],所以只需考虑是否包含其前面的K[j],如果K[j]>0则会包含)
时间: 2024-11-04 23:36:49