专栏首页算法码上来每日算法系列【LeetCode 122】买卖股票的最佳时机 II

每日算法系列【LeetCode 122】买卖股票的最佳时机 II

题目描述

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例1

输入:
[7,1,5,3,6,4]
输出:
7
解释:
在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例2

输入:
[1,2,3,4,5]
输出:
4
解释:
在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

题解

这是 【买卖股票的最佳时机】 系列题目的第二题。

这题买卖次数变成了不限,但是仍然要求在买之前必须先卖掉股票。那么观察股票的价格曲线,最优策略就是在每一段单调上升的子区间里,区间开始时购买,区间结束时卖出。这样就能保证所有的上升区间全部充分利用到了。正确性证明也不难,假设买卖过程中包含了一段下降的子区间,那么去掉它,在下降区间开头卖出,在下降区间末尾买入,得到的利润一定大于包含这段下降区间。

在具体实现时,我们可以计算相邻两个股票价格差,如果价格是上升的,那就在利润上加上它,否则就不用管。

最终的答案就是:

时间复杂度是 。

代码

python

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n, res = len(prices), 0
        for i in range(1, n):
            res += max(prices[i]-prices[i-1], 0)
        return res

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~

本文分享自微信公众号 - 算法码上来(GodNLP),作者:godweiyang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每日算法系列【LeetCode 121】买卖股票的最佳时机

    如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    godweiyang
  • 每日算法系列【LeetCode 309】最佳买卖股票时机含冷冻期

    设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

    godweiyang
  • 每日算法系列【LeetCode 188】买卖股票的最佳时机 IV

    令 为第 只股票之前(包含)买卖 次(且最后一次操作为买入)可以获得的最大利润, 为第 只股票之前(包含)买卖 次(且最后一次操作为卖出)可以获得的最...

    godweiyang
  • kubernetes ConfigMap和Secret:配置应用程序

    当启动镜像时,容器启动时执行如下命令:tail -f /var/log/aa.log

    yaohong
  • 以服务启动文件中文乱码

    SpringBoot默认的Servlet容器为Tomcat,所以尝试替换为Jetty和Undertow

    剑行者
  • 混合SSVEP-P300 BCI生产双频SSVEP

    首尔国立首尔大学医学院的科研人员介绍了一种新的混合SSVEP- P300 拼写器(speller),该拼写器能够产生双频SSVEP,在解决信息传输率(ITR)低...

    脑机接口社区
  • Python设计模式-状态模式

    切换状态的时候会使用self.__class__将它动态切换到状态对应的对象,这个稍后再看。

    zx钟
  • ARTS第二周

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    zx钟
  • Highcharts柱形范围图使用示例

    引入文件文件源码:下载https://img.hcharts.cn/highcharts/highcharts-more.js

    王小婷

扫码关注云+社区

领取腾讯云代金券