代码随想录算法训练营第四十一天|leetcode121. 买卖股票的最佳时机、leetcode122.买卖股票的最佳时机II、leetcode123.买卖股票的最佳时机III
1 leetcode121. 买卖股票的最佳时机
题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili
思路:这道题目,怎么说呢,开始我不知道怎么写,就是嗯很迷糊,写不了一点,然后看视频了也没理解,然后就是边写边看的时候,我理解了
1.1 视频后的思路
思路:就是判断,这个值持有股票和不持有股票的值的最大值,最大值的股票当然是不持有股票的时候,不然就是小的值
class Solution:
def maxProfit(self, prices: List[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],-prices[i])
dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i])
return dp[len(prices)-1][1]
1.2 本题小结
- 这个题目,确实是我不知道怎么写,就是写的时候我真的不理解为什么,然后边写边打印dp去理解的时候,我明白了,这个就是要先买才能卖,不然没啥可卖的呀
- 主要动规的难点就是不知道思路,所以就不是很会
2 leetcode122.买卖股票的最佳时机II
题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划,股票问题第二弹 | LeetCode:122.买卖股票的最佳时机II_哔哩哔哩_bilibili
思路:做的时候就感觉,不是很明白,有地方卡住了不知道下面怎么写,但是也说不上来吧,就是觉得整体肯定和之前的方法一样,就是递推公式可能需要变化,后面就是写的时候发现确实和我想的是一个样子
2.1 本题的代码
主要递推公式我当时真的想的不是很对吧,就做的还不是够多,要多练习
class Solution:
def maxProfit(self, prices: List[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])
return dp[len(prices)-1][1]
2.2 本题小结
- 其实没什么好说的,就是递推公式怎么来的吧,就是会迷惑一阵子,但是边写或者看了别人的方法以后我就明白了
- 还是得自己多上手去实验,才知道效果什么的,不要害怕,突然发现这是编程的精髓
3 leetcode123.买卖股票的最佳时机III
题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
文章链接:代码随想录
视频链接:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili
思路:就是不会,害,觉得还是有些难度吧
3.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] = -prices[0]
dp[0][3] = 0
for i in range(1,len(prices)):
dp[i][0] = max(dp[i-1][0],-prices[i])
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])
return dp[len(prices)-1][3]
3.2 本题小结
- 这个题目,怎么说呢,看视频就觉得有点傻的感觉,我一直在那儿想就是不知道怎么下笔,然后就是有那种浅放弃的感觉吧,看了视频以后就觉得,她真的不算一道难题呀
- 还是多练习吧,不能老说时间不够之类的,多去练练,就会好吧
4 今日小结
- 买卖股票,难的位置就是递推公式了,其实现在一看,动态规划的题目对我而言都挺难的,做的还不是那么的顺手吧,希望可以在之后的时间越来越好
- 就是要多思考,多去写写吧,以后继续加油

浙公网安备 33010602011771号