周末没做题,周一继续。
best time to buy and sell stock
dynamic programming
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
第一反应依然是穷举,两次遍历寻找两数差值最小值解决,代码在脑子里过了一遍然后寻找新的方法减少循环。
减少到一次遍历。思路:
假如今天是第i天,在前(i-1天)的某一天买入,该天价格为最低价格【minprice】,则若今天卖出 所获利润为:
profit = prices[i]-minprice
最大利润存在于买入之后的某一天,即寻找 max(profit)=max(price[i]-minprice):
if profit > maxprofit:
maxprofit = profit
# print(maxprofit)
寻找前(i-1)天的最低价格:
(即若今天价格低于之前的最低价格,则更新最低价格为今天价格)
elif profit <= 0:
minprice = list[i]
# print('minprice:',minprice)
第一次提交完整代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
maxprofit = 0
minprice = 1000000
# minprice = prices[0]
#for in in range(1,len(prices)): 不通过
for i in range(len(prices)):
profit = prices[i] - minprice
if profit > maxprofit:
maxprofit = profit
elif profit <= 0:
minprice = prices[i]
return maxprofit
#注:函数里变量初始化时使用类型为列表的输入参数,会执行错误?
代码简化:
maxprofit的更新可以简化:
maxprofit = max(maxprofit,prices[i]-minprice)
minprice的寻找简化:
minprice = min(prices[i],minprice)
从最终结果来看,似乎虽然代码简洁了内存减少了一丢丢,但执行慢了近一倍