代码随想录算法训练营第四十一天|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 本题小结

  1. 这个题目,确实是我不知道怎么写,就是写的时候我真的不理解为什么,然后边写边打印dp去理解的时候,我明白了,这个就是要先买才能卖,不然没啥可卖的呀
  2. 主要动规的难点就是不知道思路,所以就不是很会

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 本题小结

  1. 其实没什么好说的,就是递推公式怎么来的吧,就是会迷惑一阵子,但是边写或者看了别人的方法以后我就明白了
  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 本题小结

  1. 这个题目,怎么说呢,看视频就觉得有点傻的感觉,我一直在那儿想就是不知道怎么下笔,然后就是有那种浅放弃的感觉吧,看了视频以后就觉得,她真的不算一道难题呀
  2. 还是多练习吧,不能老说时间不够之类的,多去练练,就会好吧

4 今日小结

  1. 买卖股票,难的位置就是递推公式了,其实现在一看,动态规划的题目对我而言都挺难的,做的还不是那么的顺手吧,希望可以在之后的时间越来越好
  2. 就是要多思考,多去写写吧,以后继续加油
posted @ 2024-12-06 16:44  小方呀0524  阅读(11)  评论(0)    收藏  举报