题解 | #牛群买卖计划#

牛群买卖计划

https://www.nowcoder.com/practice/3e4ae511b4a941b788da5077b08a7d07

  • 题目考察的知识点 : 动态规划
  • 题目解答方法的文字分析:
  1. buy1 表示第一次买入的最低价格,sell1 表示第一次卖出后的最大利润,buy2 表示第二次买入的最低价格(考虑第一次卖出后的利润),sell2 表示第二次卖出后的最大利润(考虑第二次买入后的利润),buy3 表示第三次买入的最低价格(考虑第二次卖出后的利润),sell3 表示第三次卖出后的最大利润(考虑第三次买入后的利润)
  2. 在遍历价格数组时,我们根据当前价格以及之前的卖出情况来更新这些变量。具体而言,在每个价格上:
  3. 我们首先更新 buy1 和 sell1,分别为当前价格和当前价格减去之前的最低价格。
  4. 然后基于上一步的 sell1 来更新 buy2 和 sell2,分别为当前价格减去上一步的 sell1 和当前价格减去之前的最低价格。
  5. 接着基于上一步的 sell2 来更新 buy3 和 sell3,分别为当前价格减去上一步的 sell2 和当前价格减去之前的最低价格。
  6. 最终返回 sell3 作为最大利润。
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param prices int整型一维数组
# @return int整型
#
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        buy1 = float("inf")
        sell1 = 0
        buy2 = float("inf")
        sell2 = 0
        buy3 = float("inf")
        sell3 = 0

        for price in prices:
            # 第一次买入的最低价格
            buy1 = min(buy1, price)
            # 第一次卖出后的最大利润
            sell1 = max(sell1, price - buy1)
            # 第二次买入的最低价格,考虑第一次卖出后的利润
            buy2 = min(buy2, price - sell1)
            # 第二次卖出后的最大利润,考虑第二次买入后的利润
            sell2 = max(sell2, price - buy2)
            # 第三次买入的最低价格,考虑第二次卖出后的利润
            buy3 = min(buy3, price - sell2)
            # 第三次卖出后的最大利润,考虑第三次买入后的利润
            sell3 = max(sell3, price - buy3)

        return sell3
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务