代码随想录算法训练营第四十三天|leetcode300.最长递增子序列、leetcode674. 最长连续递增序列、leetcode718. 最长重复子数组

1 leetcode300.最长递增子序列

题目链接:300. 最长递增子序列 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列_哔哩哔哩_bilibili

思路:就是没思路,嗯,感觉这一块为了赶进度,自己刷题没有那么的认真,呜呜呜呜呜,希望以后可以扎实一点吧

1.1 视频后的思路

怎么说呢,其实取result的原因,是因为可能包含最后一个数的长度,比之前的长度短,导致错误才取的,自己实验后的结果

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        dp = [1]*(len(nums))
        dp[0] = 1
        result = 0
        for i in range(len(nums)):
            for j in range(i):
                if nums[j]<nums[i]:
                    dp[i] = max(dp[i],dp[j]+1)
            result = max(result,dp[i])
        return result

1.2 本题小结

  1. 这个主要是不知道dp[i]的含义,后来不是很明白为什么要取一个最大的结果,直到自己在实验的时候,就立刻举了一个反例,我就明白了这一点
  2. 又是一种新的定义方式,其实这种在之前也学习过啦

2 leetcode674. 最长连续递增序列

题目链接:674. 最长连续递增序列 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:动态规划之子序列问题,重点在于连续!| LeetCode:674.最长连续递增序列_哔哩哔哩_bilibili

思路:看了以后,只是觉得肯定跟上一题差不多,但是怎么改呢,我就有点迷惑,当时自己看的时候,然后就看了一下解析

2.1 题解后的思路

看了视频以后,发现dp[i]的值其实是一定的,就是结果的最长数组,这里需要判断一下

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        if len(nums)==1:
            return 1
        dp = [1] *len(nums)
        dp[0] = 1
        result = 0
        for i in range(1,len(nums)):
            if nums[i]>nums[i-1]:
                dp[i] = dp[i-1]+1
            result = max(dp[i],result)
        return result

2.2 本题小结

  1. 就是说,现在就感觉,每次到了判断的位置,不知道递推公式到底怎么写,确实会迷惑的地方
  2. 这道题,开始偷懒,没有对长度进行判断输出,结果就错了

3 leetcode718. 最长重复子数组

题目链接:718. 最长重复子数组 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:动态规划之子序列问题,想清楚DP数组的定义 | LeetCode:718.最长重复子数组_哔哩哔哩_bilibili

思路:就是说,两个数组,就会不知道怎么来做了

3.1 视频后的思路

想到了定义二维的dp数组,但是说实话还是会有点不知道内部含义是什么,就没写

class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:
        dp = [[0]*(len(nums2)+1) for _ in range((len(nums1)+1))]
        result = 0
        for i in range(1,len(nums1)+1):
            for j in range(1,len(nums2)+1):
                if nums1[i-1]==nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1]+1
                result = max(dp[i][j],result)
        return result 

3.2 本题小结

  1. 本题要注意的两个点,一是行和列的区分吧
  2. 就是dp的含义,就是不是很理解吧,继续学习吧

4 今日小结

  1. 还是dp的定义以及dp的递推公式怎么写,两部分需要逐步的加强吧
  2. 今天是酷酷酷的往后补,感觉效率都提升了不少
  3. 就是基础不是那么扎实,希望还是多去看看,多去写写吧
posted @   小方呀0524  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示