首页 > 编程语言 >代码随想录算法训练营day43| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

代码随想录算法训练营day43| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

时间:2024-11-11 16:22:43浏览次数:1  
标签:int 递增 result 序列 最长 dp

学习资料:https://programmercarl.com/0300.最长上升子序列.html#算法公开课

动态规划系列之子序列

学习记录
300.最长递增子序列(长度最少为1;dp[i]代表到i为止的最长子序列的长度;i的值根据i之前比如j的值来判断;每个地方都有可能获得最长长度)

点击查看代码
class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        # 动态规划,dp[i]代表以i或i以前的下标作为结尾时的递增子序列的最长长度
        if len(nums) <= 1:
            return len(nums)
        # 构造dp数组
        dp = [1]*(len(nums))
        # # 初始化
        # dp[0] = 1  # 一个数则递增子序列长度为1
        # 保存一下最长长度
        result = 1
        # 开始遍历
        for i in range(1, len(nums)):
            for j in range(0, i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j]+1)  # 如果是前面某个数达到最长长度那么再加个i就是+1    
            result = max(result, dp[i])
        return result


674.最长连续递增序列(与300题相比,因为连续就把j的都换成i-1就好了)

点击查看代码
class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        if len(nums)<=1:
            return len(nums)
        
        dp = [1]*len(nums)

        result = 1
        # 要找连续递增子序列,就只需要考虑i与i-1,而不用来一个j了
        for i in range(1, len(nums)):
            if nums[i]>nums[i-1]:
                dp[i] = max(dp[i], dp[i-1]+1)
            result = max(result, dp[i])
        return result
        

718.最长重复子数组(与674题相比,变成二维dp数组;当前一脚标的值相等,那两者都向后遍历,知道两者值不相等为止,那这段就是公共子数组长度)

点击查看代码
class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:
        # 构造dp[i][j]代表num1以i-1为结尾,num2中以j-1为结尾的最长重复连续子序列
        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]:
                    # 当前最长公共子数组长度为前一位置上的长度加1
                    dp[i][j] = dp[i-1][j-1] + 1  # 同理于最长连续递增子数列
                    if dp[i][j] > result:
                        result = dp[i][j]
        return result

PS:今天学的最早,但是没学懂,特别是第一天,怎么判断最长递增子序列
又是小雨的一天,突然发现在一个空旷的,只有灯带来光明且充满噪音的地方是难受的,但是说不定会习惯呢
早饭吃的好,一天干劲儿真不少
今天收到两个拒信,果然不好的预感一般很准。不过又有一些新的想去的地方出现,希望能把握住

标签:int,递增,result,序列,最长,dp
From: https://www.cnblogs.com/tristan241001/p/18539985

相关文章

  • 改进图卷积+informer时间序列预测代码
    本代码尝试将它转移用到时间序列中,创新思维的三维转二维,利用部分卷积进行特征提取,将提取的结果放入informer或者tranformer进行预测,预测还不错(适用的领域效果比二维差一点,但是这个思路用的人几乎没有人用!创新点很强)同时证实了引入图卷积的可行性。1.informerInformer是一种......
  • 7-35 求给定精度的简单交错序列部分和
    本题要求编写程序,计算序列部分和1-1/4+1/7-1/10+...直到最后一项的绝对值不大于给定精度eps。输入格式:输入在一行中给出一个正实数eps。输出格式:在一行中按照“sum=S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。输入样......
  • (代码随想录)leetcode300. 最长递增子序列
    自己还是写不出来[笑哭]思路错了,自己死要去只遍历一遍代码随想录答案:classSolution{public:intlengthOfLIS(vector<int>&nums){if(nums.size()<=1)returnnums.size();vector<int>dp(nums.size(),1);//所有元素都是1长度//dp[i]......
  • 最长的递增子序列--动态规划、递归
    问题简述对于一个数组,计算其中最长的递增子序列的长度,并输出。主要思路如下:代码中提供了三种不同的实现方法:纯递归、递归+动态规划(记忆化),以及纯动态规划(迭代)。下面是每种方法的主要思路:1.纯递归实现(dp方法)这个方法尝试通过递归找到以每个元素结尾的最长递增子序列的长度......
  • DAY109代码审计-PHP模型开发篇&动态调试&反序列化&变量覆盖&TP框架&原生POP链
    知识点1、PHP审计-动态调试-变量覆盖2、PHP审计-动态调试-原生反序列化3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字SQL注入:selectinsertupdate deletemysql_querymysqli等文件上传:$_FILES,type="file",上传,move_uploaded_file()等XSS跨站:printprint_r......
  • 动态规划-古生物DNA序列血缘分析
    问题描述DNA是由A、C、G、T四种核苷酸组成,例如AAAGTCTGAC,假定自然环境下DNA发生异变的情况有:基因缺失一个核苷酸基因新增一个核苷酸基因替换一个核苷酸且发生概率相同。古生物学家Sam得到了若干条相似DNA序列,Sam认为一个DNA序列向另外一个DNA序列转变所需的......
  • 力扣(LeetCode)106. 从中序与后序遍历序列构造二叉树
    一、目标  给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。二、代码分析总体代码:/***Definitionforabinarytreenode.*publicclassTreeNode{*int......
  • P1637 三元上升子序列
    P1637三元上升子序列简要题意,在一个序列中寻找长度为三的上升子序列思路有两种思路直接法一种是对于一个树,算一个数左边比他小的数,算右边比他大的数,然后相乘即是该该点处值算比他大的数,和比他小的数,用树状数组或线段树即皆可CODE#include<bits/stdc++.h>usingnamespace......
  • LeetCode128 最长连续序列
    最长连续序列题目链接:LeetCode128描述给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它......
  • 【让中国再次伟大】腾讯开源大语言模型Hunyuan-large,支持高达256K文本序列
    腾讯今日发布开源MOE大语言模型Hunyuan-large,总参数量达398B,激活参数量52B。公开测评结果显示,腾讯混元Large在CMMLU、MMLU、CEva1、MATH等多学科综合评测集以及中英文NLP任务、代码和数学等9大维度全面领先,超过Llama3.1、Mixtral等一流的开源大模型。随着人工智能技术的飞......