代码随想录算法训练营第四十二天|leetcode188.买卖股票的最佳时机IV、leetcode309.最佳买卖股票时机含冷冻期、leetcode 714.买卖股票的最佳时机含手续费
1 leetcode188.买卖股票的最佳时机IV
题目链接:188. 买卖股票的最佳时机 IV - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划来决定最佳时机,至多可以买卖K次!| LeetCode:188.买卖股票最佳时机4_哔哩哔哩_bilibili
思路:其实跟三很像,将那个进行一个循环就好了
1.1 自己的方法
就是容易把那个后面的数字给写超出范围,其他的就还行
class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
dp = [[0]*(2*k+1) for _ in range(len(prices))]
for i in range(1,len(dp[0]),2):
dp[0][i] = -prices[0]
for j in range(1,len(prices)):
for m in range(0,2*k-1,2):
dp[j][m+1] = max(dp[j-1][m+1],dp[j-1][m]-prices[j])
dp[j][m+2] = max(dp[j-1][m+2],dp[j-1][m+1]+prices[j])
return dp[len(prices)-1][2*k]
1.2 本题小结
- 买卖股票的题目,重点就是定义dp上面,dp的含义就包含是买股票还是不买股票,两种状态
- 第二个就是递推公式的书写,这里也是很有技巧的地方,容易写错吧,其实还是,就像最后一题,我写着也会超出时间的限制,还是多练习吧,总之
2 leetcode309.最佳买卖股票时机含冷冻期
题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili
思路:确实加了冷冻期以后我就不知道怎么往后面写了,有一说一,还是多看多积累吧
2.1 视频后的思路
怎么说呢,感觉挺清晰的,但是也没那么清晰吧,也有一点迷糊在里面的,但是我也能理解一些
class Solution:
def maxProfit(self, prices: List[int]) -> int:
dp = [[0]*4 for _ in range(len(prices))]
dp[0][0] =-prices[0]
dp[0][1] = 0
dp[0][2] = 0
dp[0][3] = 0
for i in range(1,len(prices)):
dp[i][0] = max(dp[i-1][0],dp[i-1][3]-prices[i],dp[i-1][1]-prices[i])
dp[i][1] = max(dp[i-1][3],dp[i-1][1])
dp[i][2] = dp[i-1][0]+prices[i]
dp[i][3] = dp[i-1][2]
return max(dp[len(prices)-1][1],dp[len(prices)-1][2],dp[len(prices)-1][3])
2.2 本题小结
- 这个题目,怎么说呢,就是状态的确定吧,但是几个状态之间的耦合性真的太强了,导致我其实也有一些不理解的地方吧,接下来后续还是多看看吧
- 冻结期的这一块,其实还是有点模糊的吧,希望后面能慢慢看懂,为什么,自己能理解吧
3 leetcode 714.买卖股票的最佳时机含手续费
题目链接:714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费_哔哩哔哩_bilibili
3.1 本题的方法
感觉这道题,思路非常明显,直接在后面进行一个减去费用的操作就行了
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
dp = [[0]*2 for _ in range(len(prices))]
dp[0][0] = -prices[0]
dp[0][1] = 0
for i in range(1,len(prices)):
dp[i][0] = max(dp[i-1][0],dp[i-1][1]-prices[i])
dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]-fee)
return dp[-1][-1]
3.2 本题小结
- 跟之前的方法真的一模一样,就是有一个卖了股票以后需要减去手续费即可,其他的操作依然相同
- 真的逐渐掌握啦
4 今日小结
- 这些题目,股票类问题,说白了就是围绕着这个递推公式,逐步在里面变着花样玩,但是呢,里面的本质逻辑没什么变化
- 终于又掌握了一种题型,希望自己继续加油咯

浙公网安备 33010602011771号