我的想法
我的状态转移方程后面的部分没有总结出规律,看了题解才想到后面的一坨只要用第i天的价格减去前i-1天的最小值就可以。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
dp=[0]*len(prices)
dp[0]=0
for i in range(1,len(prices)):
dp[i]=max(dp[i-1],prices[i]-min(prices[:i]))
return dp[len(prices)-1]
算法优化
每次循环把最小值记录下来,不用使用min(prices[:i])求最小值,提高效率
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
dp=[0]*len(prices)
dp[0]=0
minPrices=prices[0]
for i in range(1,len(prices)):
minPrices=min(minPrices,prices[i])
dp[i]=max(dp[i-1],prices[i]-minPrices)
return dp[len(prices)-1]
利用一个变量记录最大利润,节省空间
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
maxProfit=0
minPrices=prices[0]
for i in range(1,len(prices)):
minPrices=min(minPrices,prices[i])
maxProfit=max(maxProfit,prices[i]-minPrices)
return maxProfit