思路:动态规划/双指针 及其优化写法
i用来遍历,minprice记录目前最小值,每遍历一个数记录一会利润,保存最大的profit
可以看作双指针i和minprice,i不停移动,minprice保持在最小位置
import math
class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit=0
minprice=math.inf
for i in prices:
minprice=min(minprice,i)
profit=max(profit,i-minprice)
return profit
动态规划写法:dp[i]记录了每天为止最大的利润,其实我们只需要最后一天的
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
if n == 0: return 0 # 边界条件
dp = [0] * n
minprice = prices[0]
for i in range(1, n):
minprice = min(minprice, prices[i])
dp[i] = max(dp[i - 1], prices[i] - minprice)
return dp[-1]