代码随心录算法训练营第四十五天|动态规划08
- 其他
- 2025-08-21 16:30:01

121. 买卖股票的最佳时机
视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili
代码随想录
dp[i][0]表示的是截至第i天股票的最小值,取负数
dp[i][1]表示的是截至第i天股票的最大利润
class Solution: def maxProfit(self, prices: List[int]) -> int: length=len(prices) if length==0: return 0 dp=[[0]*2 for _ in range(length)] dp[0][0]=-prices[0] dp[0][1]=0 for i in range(1,length): dp[i][0]=max(dp[i-1][0],-prices[i]) dp[i][1]=max(dp[i-1][1],prices[i]+dp[i-1][0]) return dp[-1][1] 122.买卖股票的最佳时机II视频讲解:动态规划,股票问题第二弹 | LeetCode:122.买卖股票的最佳时机II_哔哩哔哩_bilibili
代码随想录
不需要二维数组,一维就可以解决
class Solution: def maxProfit(self, prices: List[int]) -> int: dp=[0]*len(prices) for i in range(1,len(prices)): dp[i]=max(dp[i-1],dp[i-1]+prices[i]-prices[i-1]) return dp[-1] 123.买卖股票的最佳时机III这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。
视频讲解:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili
代码随想录
dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金
一天一共就有五个状态,
没有操作第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 class Solution: def maxProfit(self, prices: List[int]) -> int: if len(prices)==0: return 0 dp=[[0]*5 for _ in range(len(prices))] dp[0][1]=-prices[0] dp[0][3]=-prices[0] for i in range(1,len(prices)): dp[i][0]=dp[i-1][0] dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]) dp[i][2]=max(dp[i-1][2],dp[i-1][1]+prices[i]) dp[i][3]=max(dp[i-1][3],dp[i-1][2]-prices[i]) dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i]) return dp[-1][4]代码随心录算法训练营第四十五天|动态规划08由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“代码随心录算法训练营第四十五天|动态规划08”