题解 | #牛群买卖计划#
牛群买卖计划
https://www.nowcoder.com/practice/3e4ae511b4a941b788da5077b08a7d07
- 题目考察的知识点 : 动态规划
- 题目解答方法的文字分析:
- buy1 表示第一次买入的最低价格,sell1 表示第一次卖出后的最大利润,buy2 表示第二次买入的最低价格(考虑第一次卖出后的利润),sell2 表示第二次卖出后的最大利润(考虑第二次买入后的利润),buy3 表示第三次买入的最低价格(考虑第二次卖出后的利润),sell3 表示第三次卖出后的最大利润(考虑第三次买入后的利润)
- 在遍历价格数组时,我们根据当前价格以及之前的卖出情况来更新这些变量。具体而言,在每个价格上:
- 我们首先更新 buy1 和 sell1,分别为当前价格和当前价格减去之前的最低价格。
- 然后基于上一步的 sell1 来更新 buy2 和 sell2,分别为当前价格减去上一步的 sell1 和当前价格减去之前的最低价格。
- 接着基于上一步的 sell2 来更新 buy3 和 sell3,分别为当前价格减去上一步的 sell2 和当前价格减去之前的最低价格。
- 最终返回 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题的解法思路