美文网首页项目开发技巧程序员iOS 开发
求一个最大子数组算法实现

求一个最大子数组算法实现

作者: 王梓舟 | 来源:发表于2016-05-24 14:06 被阅读81次

    事实上,这个问题可以用最大子数组来解决,把某一天的股票价格减去前一天的股票价格,求出当天股票价格浮动变化,再加入到数组里,依次类推把每一天的价格浮动变化组合起来构成一个数组,求出它的最大子数组即为最大收益。

    如何求出一个最大子数组(最大子数组可能有多个,求出一个即可)呢?

    首先我们可以对这个数组进行分割,从中间划开一刀(如果数组元素个素为单数,偏左偏右划都是可以的),那么这个最大子数组必然在这一刀的左边,右边或者跨越了这一刀痕的中间。

    OK,那么接下来我们需要求出这三种情况的最大子数组,对它们三个进行比较,那么如何求出左边数组的最大子数组呢?聪明的人已经发现还是和刚才的求法一样,在左边的数组的中间再划一刀!是的,所以这个算法是用递归来实现的,一刀一刀划下去,最后会变成最简单的子问题,得到子问题的答案,再一级一级往回返,进行比较,就可以得出最终问题的解了。

    接下来直接贴算法


    附上项目下载地址:https://github.com/zizhouwang/GetMaxSubarray

    以上所有文字图片均摘于算法导论原书第3版中文完整版 高清扫描版

    相关文章

      网友评论

        本文标题:求一个最大子数组算法实现

        本文链接:https://www.haomeiwen.com/subject/fzjzrttx.html