最大子数组问题

题目描述

你的任务是根据每天的股票价格,求得最大的收益。

解决方案

  1. 暴力求解,时间复杂度为O(n2)

  2. 分治策略,时间复杂度为O(nlogn)

    1. 最大子数组可能出现的位置:完全在A[low,mid],完全在A[mid+1,high],跨越了中点。

    2. 一次求的三种情况的最大子数组,再取最大值。跨越中点的子数组一定由A[i...mid]和A[mid+1...j]组成。所以我们只需分别求出对应的最大子数组,然后将其合并。

  3. 用online algorithm思想O(n)

    依次遍历数组,存储当前的最小值,以及最大子数组值。在遇到新的数都和当前最小值进行比较,

  • 如果比最小值小,就更新最小值

  • 如果比最小值大,就求差,验证是否比最大子数组值大。

    • 比最大子数组值大,就更新目前的结果

    • 没有最大子数值大就遍历下一个数

posted @ 2020-11-16 22:20  沐慕木七  阅读(78)  评论(0)    收藏  举报