问题:连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个。 最大子序列和是指,给定一组序列,如 [1,-3,2,4,5],求子序列之和的最大值,对于该序列来说,最大子序列之和为 2 + 4 + 5 = 11。
解决方案有很多:1、两个for循环 2 动态规划 3分治算法 4 在线算法
1、 2个for循环的算法,思想是:以每一个数为第一个数,在这些序列中找出最大值 举例的步骤如下:
2、动态规划 思想是:以每个数为该子串的最后一个数,找出这个子串的最大值,然后在这些最大值中找最大值
对上面的数进行举例
d[0]=1
d[1]=max(d[0]-3,-3)=-2
d[2]=max(d[1]+2,2)=2
d[3]=max(d[2]+4,4)=6
d[4]=max(d[3]+5,5)=11
3 分治的做法 思想是:用二分查找的思路,先找出左子列的最大连续值,接着找出右子列的最大连续值,接着找出中间 的跨左右子列的最大值,然后取左子列、右子列、中间列值中的最大值。 举例说明:
以 4 - 3 -2 说明
lm 代表左字列最大值,rm代表右子列最大值,bm代表跨边界最大值