介绍
计算机历史上有一个非常经典的问题叫做Maximum-Subarray-Problem, 求数组的最大子序列,要求该子序列和为最大值,子序列应当连续。
比如 [−2, 1, −3, 4, −1, 2, 1, −5, 4], 最大应该子序列为 [4, −1, 2, 1]。
暴力的解法是算出所有的子序列,然后求和,该方法的时间复杂度为O(n^2).
Kadane’s Algorithm
Kadane’s Algorithm是求解该类问题的一个通法,原理是利用Dynamic Programming保存所有以i结尾的子序列的最大长度,dp公式为: