Leetcode daily 20/03/09 买卖股票的最佳时机 笔记

买卖股票的最佳时机

-题目-

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。

-示例1-

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

-示例2-

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。


-方法1-

  • 设置变量max_value记录最大利润。
  • 遍历数组:
    • 数组第\(i\)个价格,即买入价格price_buy和在其之后的最大价格,即卖出价格sell_price作差:price_sell - price_buy,得到买入价格price_buy的最大利润max_i
    • 取最大利润max_value和当天买入价格price_buy的最大利润max_i较大值为max_value
  • 最终的max_value为结果。

-ac代码-

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        max_value = 0

        for i in range(len(prices)):
                price_buy = prices[i]
                price_sell = max(prices[i:])
                max_i = price_sell - price_buy

                max_value = max(max_i, max_value)

        return max_value

-复杂度-

  • \(T(n) = O(n^2)\)
  • \(S(n) = O(1)\)

-方法2-

  • 设置变量记录最低价格min_value,最大利润max_profit
  • 遍历数组。对每一个价格price
    • 最低价格min_value与当前价格price比较取较小,更新最低价格min_value
    • 当前价格price和最低价格min_value的差与最大利润max_profit取较大,更新最大利润max_profit
  • 最终最大利润max_profit为结果。

-ac代码-

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        min_value = float("inf")
        max_profit = 0

        for price in prices:
            min_value = min(price, min_value)
            max_profit = max(max_profit, price - min_value)

        return max_profit

-复杂度-

  • \(T(n) = O(n)\)
  • \(S(n) = O(1)\)

-笔记-

  • 题目-笔记:不一定是数组最大减最小。
  • 算法-笔记:对序列类变量,判断是否需要针对空序列增加操作,特别是用到索引操作时。空序列可看成特例。
  • python-笔记:需要最小化的变量的初始值可设置为float("inf")
  • 算法-todo:无序列表找最大值的方法。
  • 题目-问题:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices:
            return 0

        max_value = 0
        for buy_idx in range(len(prices)):
            for sell_idx in range(buy_idx + 1, len(prices)):
                max_value = max(prices[sell_idx] - prices[buy_idx], max_value)

   这段代码复杂度也是\(O(n^2)\),为啥超时?

posted @ 2020-03-10 16:05  Sola~  阅读(93)  评论(0编辑  收藏  举报