0
点赞
收藏
分享

微信扫一扫

Python每日一练-----买卖股票的最佳时机Ⅲ

梦想家们 2022-04-01 阅读 64

(day18)

目录

🖍题目:

题目分析:

解题思路:

🌈动态规划解法

✏代码注释


🖍题目:

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

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

🌠示例 1:

🌠示例 2:

🌠示例 3:

🌠示例 4:

题目分析:

题目要求找出在最多进行两次交易的情况下获得的利润最大值,这意味着我们可以进行一次交易,也可以进行两次交易。但是手中持有股票时必须先出售才能进行第二次购买。

解题思路:

代码实现

🌈动态规划解法

def maxProfit(prices):
    first_buy_profit = second_buy_profit = -prices[0]
    first_sell_profit = second_sell_profit = 0

    for i in range(1, len(prices)):
        first_buy_profit = max(first_buy_profit, -prices[i])
        first_sell_profit = max(first_sell_profit, first_buy_profit+ prices[i])
        second_buy_profit = max(second_buy_profit, first_sell_profit - prices[i])
        second_sell_profit = max(second_sell_profit, second_buy_profit + prices[i])

    return second_sell_profit

✏代码注释

def maxProfit(prices):
    # 初始化递归基础
    first_buy_profit = second_buy_profit = -prices[0]
    first_sell_profit = second_sell_profit = 0
    # 运行递归公式,因为第0天已在初始化中讨论,所以i从1开始
    for i in range(1, len(prices)):
        first_buy_profit = max(first_buy_profit, -prices[i])
        first_sell_profit = max(first_sell_profit, first_buy_profit + prices[i])
        second_buy_profit = max(second_buy_profit, first_sell_profit - prices[i])
        second_sell_profit = max(second_sell_profit, second_buy_profit + prices[i])
        
    return second_sell_profit   # 返回结果

一位程序需要遍历一次数组所以时间复杂度为O(n),只需四个状态储存运行,空间复杂度O(1).

今天就到这,明天见。🚀

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

举报

相关推荐

0 条评论