Leetcode刷题:剑指offer【面试题63 股票的最大利润】

【面试题63 股票的最大利润】

面试题63:股票的最大利润:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

思路:动态规划。

  • 明确状态:本题唯一的变量就是“能够获取的最大利润”
  • dp 数组dp[i] 表示在第 i 天选择卖出,能够获取的最大利润
  • 明确选择:假设在第 i 天卖出,那么可以选择在 0~i-1 的任意一天买入,原则是能够获得最大利润
  • 状态间转移关系:不论第 i 天的股票价格是否高于前一天,都有以下状态转移关系:dp[i] = max(0, prices[i]-(prices[i-1]-dp[i-1])),利用 prices[i-1]-dp[i-1] 可以计算得到前 i-1 天内的最低股票价格
  • 确定 base case:当 i=0 时,利润为 0

注意到状态转移公式 dp[i] 仅和 dp[i-1] 有关,所以不需要真的建立 dp 数组,用变量 precur 来维护即可。

时间复杂度O(n)O(n)
空间复杂度O(1)O(1)

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices: return 0
        n = len(prices)
        pre, m = 0, 0
        for i in range(1, n):
            cur = max(0, prices[i]-(prices[i-1]-pre))
            pre = cur
            m = cur if cur > m else m
        return m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章