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

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

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

题目描述

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

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

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

示例1

代码语言:javascript
复制
输入:
[2,4,1], k = 2
输出:
2
解释:
在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

示例2

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

题解

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

这题是最一般的情况了,也就是最多可以买卖 次。那么我们采用动态规划来求解。

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

那么对于 来说,最后一次操作是买入,所以分为两种情况。

  • 一种是不买第 只股票,那么最大利润就是前 只股票买卖 次(且最后一次操作为买入)的最大利润:
  • 一种是买第 只股票,那么最大利润就是前 只股票买卖 次(且最后一次操作为卖出)的最大利润:

而对于 来说,最后一次操作是卖出,所以分为两种情况。

  • 一种是不卖第 只股票,那么最大利润就是前 只股票买卖 次(且最后一次操作为卖出)的最大利润:
  • 一种是卖第 只股票,那么最大利润就是前 只股票买卖 次(且最后一次操作为买入)的最大利润:

综上转移方程就是:

初始情况就是 和 时,单独计算一下就行了。

此外本题还可以优化成一维数组,就不展开介绍了,大家可以参考代码。

时间复杂度是 。

代码

python

代码语言:javascript
复制
class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        n = len(prices)
        if n == 0: return 0
        if k >= n//2:
            res = 0
            for i in range(1, n):
                res += max(prices[i]-prices[i-1], 0)
            return res
        dp0 = [-prices[0]] * (k+1)
        dp1 = [0] * (k+1)
        for p in prices[1:]:
            for i in range(1, k+1):
                dp1[i] = max(dp1[i], dp0[i]+p)
                dp0[i] = max(dp0[i], dp1[i-1]-p)
        return max(dp1[k], 0)

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

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

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

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

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

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