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

思路
暴力法
卖出第i天所能获得的做大利润d[i],取决于nums[i] - min(nums[j]), j <= i
创建一个dp_table,用于保存第i天卖出能获得的最大利润。
一次遍历
对于当前i卖出buy_out能获得的最大利润,只和i以前的最低买入价格buy_in有关。
使用一个变量记录最低买入价格lowest_buy_out,第i天抛出能得到的最大利润就是prices[i] - lowest_buy_out。
代码
class Solution:def maxProfit(self, prices: List[int]) -> int:max_ans = 0for i in range(len(prices)):low_buy_in = prices[i]for j in range(0, i):low_buy_in = min(low_buy_in, prices[j])if prices[i] - low_buy_in > max_ans:max_ans = prices[i] - low_buy_inreturn max_ans
空间复杂度:O(1)
时间复杂度:O(n^2)
时间复杂度超了。
class Solution:def maxProfit(self, prices: List[int]) -> int:max_ans = 0lowest_buy_in = float('INF')for i in range(len(prices)):if prices[i] < lowest_buy_in:lowest_buy_in = prices[i]max_ans = max(max_ans, prices[i] - lowest_buy_in)return max_ans
空间复杂度:O(1)
时间复杂度:O(n)
