前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 188. 买卖股票的最佳时机 IV

Leetcode 188. 买卖股票的最佳时机 IV

作者头像
zhipingChen
发布2019-06-15 17:51:44
9730
发布2019-06-15 17:51:44
举报
文章被收录于专栏:编程理解编程理解

题目描述

给定一个数组,它的第 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 。

解法

参考:Leetcode 123. 买卖股票的最佳时机 III

因为 j 只有 0 和 1 两种状态,则有如下递推关系式:

dp 数组的初始化中,dp0 无意义,因为这里以买入股票作为开始一次交易,所以不存在 0 次交易,持有股票的情况。

代码语言:javascript
复制
class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        if not prices or k<1:
            return 0
        dp=[[0,-prices[0]] for i in range(k+1)]
        for i in range(1,len(prices)):
            for k in range(1,k+1):
                dp[k][1]=max(dp[k][1],dp[k-1][0]-prices[i])
                dp[k][0]=max(dp[k][0],dp[k][1]+prices[i])
        return dp[k][0]

因为在该题目的测试用例中,给出的 k 值存在极大数字的情况,考虑到当

时,意味着在该股票价格列表中,可以随意买入和卖出,即相当于不限制次数,所以增加对 k 值的判断。

代码语言:javascript
复制
class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        if not prices or k<1:
            return 0
        if k>len(prices)//2:  #相当于不限制交易次数
            i0,i1=0,-prices[0]
            for i in range(1,len(prices)):
                i0=max(i0,i1+prices[i])
                i1=max(i1,i0-prices[i])
            return i0
        dp=[[0,-prices[0]] for i in range(k+1)]
        for i in range(1,len(prices)):
            for k in range(1,k+1):
                dp[k][1]=max(dp[k][1],dp[k-1][0]-prices[i])
                dp[k][0]=max(dp[k][0],dp[k][1]+prices[i])
        return dp[k][0]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档