前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日算法系列【LeetCode 309】最佳买卖股票时机含冷冻期

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

作者头像
godweiyang
发布2020-03-24 11:02:12
3650
发布2020-03-24 11:02:12
举报
文章被收录于专栏:算法码上来算法码上来

题目描述

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。

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

你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

示例1

输入:
[1,2,3,0,2]
输出:
3
解释:
对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

题解

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

这题其实就是在系列题目第二题基础上加了个限制条件,也就是每次卖了之后,隔一天才能继续买。

模仿第五题,还是采用动态规划。令 为第 只股票之前(包含)买卖(最后一次操作是买)可以获得的最大利润, 为第 只股票之前(包含)买卖(最后一次操作是卖)可以获得的最大利润。那么类似的有如下转移方程:

初始情况就是 和 。

和第二、五题区别就是 的转移方程中有个 ,也就是得隔一项,去算前前一天之前(包含)的买卖最大利润。

时间复杂度是 。

代码

python

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法码上来 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 题解
  • 代码
    • python
    相关产品与服务
    NLP 服务
    NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档