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

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

题目描述

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

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

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

示例1

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

示例2

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

题解

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

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

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

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

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

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

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

综上转移方程就是:

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

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

时间复杂度是  。

代码

python

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)
相关文章
|
2月前
|
算法
《LeetCode》—— 买卖股票的最佳时机
《LeetCode》—— 买卖股票的最佳时机
|
3天前
|
算法 数据可视化 数据挖掘
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
|
8天前
|
机器学习/深度学习 自然语言处理 算法
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(下)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
13 0
|
8天前
|
机器学习/深度学习 算法 大数据
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(上)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
13 0
|
17天前
|
算法
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ
|
29天前
|
算法
【力扣经典面试题】121. 买卖股票的最佳时机
【力扣经典面试题】121. 买卖股票的最佳时机
|
2月前
|
算法
leetcode121. 买卖股票的最佳时机
leetcode121. 买卖股票的最佳时机
14 0
|
12天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
2天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
10 0

热门文章

最新文章