自学内容网 自学内容网

【图解版】力扣第121题:买卖股票的最佳时机

思路

每天有两个步骤:

  • 更新到今天为止的最低价格(老子前面几天最低点都记下了)
  • 更新到今天为止的最大利润(今天卖能赚多少)
可能会想着:更新从前面到最后一天的最低价格,其实每天更新的时候,维护好自己当前的最小值就可以了,一直遍历到最后,自然而然就得到了全局的最低价格,而且每天的最大利润也是只能和前面遍历过的最低值比较,不能和后面的最低值比较,所以一开始直接取全局最小也没什么意义。

这个转移方程可以写成这样:
最大利润 = max(最大利润 , 今天的价格 − 最低价格)
最低价格 = min(最低价格, 今天的价格)
边界条件:一开始没有最低价格,也没有利润。所以我们从第一天的价格入手,默认最低价格是第一天的价格,利润是0。也可以写成无穷小。

Golang代码实现

func maxProfit(prices []int) int {
    maxProfit := math.MinInt64// 最大利润
    minNum := math.MaxInt64// 最小值
    for i := range prices {
        if prices[i] < minNum {
            minNum = prices[i]
        }

        if maxProfit < prices[i] - minNum {
            maxProfit = prices[i] - minNum
        }
    }

    return maxProfit 
}

原文地址:https://blog.csdn.net/e2788666/article/details/143455242

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!