首页 > 其他分享 >补|(52/60)最长递增子序列、最长连续递增序列、最长重复子数组

补|(52/60)最长递增子序列、最长连续递增序列、最长重复子数组

时间:2024-03-28 17:13:59浏览次数:17  
标签:nums int 递增 maxIndex 序列 最长 dp

子序列问题

最长递增子序列

leetcode:300. 最长递增子序列

动态规划

代码实现

/*
以nums[i]结尾的(含)递增子序列最长为dp[i]

dp[i]由dp[0~i-1]的最大值推出
if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j] + 1);    // 如果严格递增

dp[0] = 1;其余为0

正序遍历
*/

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        vector<int> dp(nums.size(),1);
        int maxIndex = 0;
        for(int i = 1;i < nums.size();i++){
            for(int j = 0;j < i ;j++){
                if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j] + 1);    // 如果严格递增
            }
            if(dp[i] > dp[maxIndex]) maxIndex = i;
        }

        return dp[maxIndex];
    }
};

最长连续递增子序列

leetcode:674. 最长连续递增序列

动态规划

思路

要求连续,所以只需比较上一个元素。(非连续需要比较0~i-1所有元素)

意义依旧是“以nums[i]结尾的(含)递增子序列最长为dp[i]”,所以还要记录一下最大元素。

代码实现

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        vector<int> dp(nums.size(),1);
        int maxIndex = 0;
        for(int i = 1;i < nums.size();i++){
            if(nums[i] > nums[i-1]) dp[i] = max(dp[i],dp[i-1] + 1);
            if(dp[i] > dp[maxIndex]) maxIndex = i;
        }

        return dp[maxIndex];
    }
};

最长重复子数组

leetcode:718. 最长重复子数组

代码实现

/*
以nums[i-1]nums[j-1]结尾的最长公共子数组长度为dp[i][j]

if(nums[i-1] = nums[j-1])
dp[i][j] = dp[i-1][j-1] + 1;

dp[i][0] = 0;dp[0][j] = 0; 其余为0


*/
class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size()+1,vector<int>(nums2.size()+1,0));
        int result = 0;
        for(int i = 1;i <= nums1.size();i++){
            for(int j = 1;j <= nums2.size();j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                    result = max(result,dp[i][j]);
                }
                
            }
        }

        return result;
    }
};

标签:nums,int,递增,maxIndex,序列,最长,dp
From: https://www.cnblogs.com/tazdingo/p/18102146

相关文章

  • 洛谷题单指南-图的基本应用-P1807 最长路
    原题链接:https://www.luogu.com.cn/problem/P1807题意解读:由于对于每一条边u->v,都有u<v,因此节点1的入度一定是0,且是有向无环图,直观上可以通过拓扑排序法搜索每一个节点,计算1到每一个节点的最长距离。但问题在于,入度为0的节点可能不止一个,这样在计算到某个点的最长距离时,会受到......
  • Fastjson反序列化分析
    依赖先研究1.2.24版本的,版本高了就有waf了,不过也能绕,高版本以后再说<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency><dependency><groupId&g......
  • 「NOI2009」变换序列
    二分图最大匹配#贪心如果没有字典序最小的限制,直接二分图最大匹配就可以了考虑怎么让字典序最小倒序匹配左侧节点,对于每个节点,优先尝试字典序较小的方案,用hungary就行另,如果用费用流,需要将斐波那契的第\(10^4\)位作为费用//Author:xiaruize#ifndefONLINE_JUDGEbool......
  • Prufer 序列
    以下\(d_i\)表示\(i\)的度数。Prufer序列完成了一个有标号无根树与序列的双射。长度为\(n-2\)的值域\([1,n]\)的序列一一对应一棵\(n\)个点的有标号无根树。构建序列的方式就是每次找编号最小的叶节点,然后把它连接的点加入序列,然后删掉这个叶节点。原因是什么我也不......
  • P5470 [NOI2019]序列 题解
    P5470:NOI2019序列题意:给定两个长度\(n\)的序列\(a,b\)。要求各选出\(k\)个数,使得这\(2k\)个数之和最大,且两个序列选出的数至少有\(l\)个位置相同。\(n\le2\times10^5\)。command_block的题解但是这个貌似有一些小问题,后文有写。算法:模拟费用流。【费用流模......
  • 关联数据和序列化
    由于EFCore会自动修正导航属性,因此在对象图中可能会产生循环引用。例如,加载博客及其关联文章会生成引用文章集合的博客对象。其中每篇文章将返回引用该博客。某些序列化框架不允许使用循环引用。例如,Json.NET在发现循环引用的情况下,会引发以下异常。Newtonsoft.Json.Json......
  • 【图论】3.26学习记录 最短路/最长路 次短路
    最短路:SPFA:特点:代码短好写,负权边必备,可以判环,容易被卡成O(nm);code:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintMAXN=5e5+10;constintinf=2147483647;intdist[MAXN];intvis[MAXN];vector<pair<int,int>>e[MAXN];si......
  • Chronos: 将时间序列作为一种语言进行学习
    这是一篇非常有意思的论文,它将时间序列分块并作为语言模型中的一个token来进行学习,并且得到了很好的效果。Chronos是一个对时间序列数据的概率模型进行预训练的框架,它将这些值标记为与基于transformer的模型(如T5)一起使用。模型将序列的值缩放和量化到一个固定的词汇表,并在通过......
  • ETL工具-nifi干货系列 第四讲 Avro schema 序列化框架
    一、在使用nifi的过程中会使用到遇到avroschema、avrodata、avroReader、avroWriter等,所以本节课和大家一起学习下avro相关知识。 二、什么是AvroApacheAvro是hadoop中的一个子项目,也是一个数据序列化系统,其数据最终以二进制格式,采用行式存储的方式进行存储。三、什么......
  • 常见问题系列(一)对象序列化
    对象序列化是非常常见的技术,序列化为Xml或者Json字符串,这里记录使用微软内置库序列化为Xml遇到的一个问题。原始代码:usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text;usingSystem.Xml.Serialization;namespaceSerializeObject{......