洛谷java实现(P1439[模板]最长公共子序列)

动态规划——最长公共子序列(洛谷P1439) 2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。BAT面试经验实战系列:Spring全家桶+Redis等其他相关的电子书:源码+调优面试真题:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》 阅读详情

题目链接:https://www.luogu.com.cn/problem/P1439

首先这是一道绿题,如果用动态规划(时间复杂度n^2)对于n=10 ^5肯定过不了,当然动态规划适合leetcode这道题1143. 最长公共子序列感兴趣可以看看
题解如下:

 /**
     * 动态规划+内存优化
     */
public int longestCommonSubsequence(String text1, String text2) {
    if (text1 == null || text2 == null) return 0;
    if (text1.length() < text2.length()) {
        longestCommonSubsequence2(text2, text1);
    }
    char chars1[] = text1.toCharArray(), chars2[] = text2.toCharArray();
    int dp[] = new int[chars2.length + 1];
    for (int i = 1; i <= chars1.length; i++) {
        int cur = 0;
        for (int j = 1; j <= chars2.length; j++) {
            int leftTop = cur;
            cur = dp[j];
            if (chars1[i - 1] == chars2[j - 1]) {
                dp[j] = leftTop + 1;
            } else {
                dp[j] = Math.max(dp[j], dp[j - 1]);
            }
        }
    }
    return dp[chars2.length];
}

言归正传,既然动态规划(时间复杂度n^2)解决不了这题,那我们得寻求另一种解法:

  1. 这题与leetcode那题有所不同,两组数据是n的全排序,所以说公共的数只是在两组数据的位置不同罢了,而最长公共子序列的数的索引必然是递增的!
  2. 把两组数据转化成,第二组数据在第一组数据出现的位置,并按顺序保留索引,故而将原问题的解转换成对当前索引求其最长上升子序列(严格递增)类似问题的(最长不下降序列)(nlogn解法)的问题
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int map[] = new int[n + 1];
        int top[] = new int[map.length];
        for (int i = 0; i < n; i++) {
            map[in.nextInt()] = i;
        }
        int len = 1;
        top[0] = map[in.nextInt()];
        for (int i = 1; i < n; i++) {
            int nowIndex = map[in.nextInt()];
            if (nowIndex > top[len - 1]) {
                top[len++] = nowIndex;
                continue;
            }
            int begin = 0, end = len;
            while (begin < end) {
                int mid = (begin + end) >> 1;
                if (nowIndex <= top[mid]) {//找到第一个大于等于nowIndex的索引
                    end = mid;
                } else {
                    begin = mid + 1;
                }
            }
            top[begin] = nowIndex;
        }
        System.out.println(len);
    }
}
AI Agent生产就崩?7道生死关卡与系统性落地指南 AI Agent作为新一代智能服务范式,其核心在于将大语言模型(LLM)与工具调用、检索增强(RAG)、工作流编排深度协同。然而,从概念验证到真实生产环境的跨越,本质是工程化能力的跃迁:需直面数据漂移、服务依赖不确定性、用户输入熵值爆炸及可观测性缺失等系统性挑战。技术价值不仅在于‘能思考’,更在于‘可监控、可降级、可回滚、可演进’。典型应用场景涵盖智能客服、自动化导购、跨系统任务编排等高交互业务流。本文聚焦AI Agent生产就绪(Production Readiness)的关键断层,结合LLM Obser 阅读详情

相关推荐

最长公共子序列(java实现)

关于动态规划算法的最长公共子序列的Java代码,帮助了解算法实现过程

剑指 Offer II 095. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 来源:力扣(LeetCode) 链接:https://leetcode-cn.

qq_43544587的博客 178

四路独立可控供电USB 2.0智能集线器设计

USB集线器是连接外设的基础接口设备,其供电管理能力直接影响系统可靠性与远程运维效率。传统HUB仅提供固定VBUS输出,缺乏端口级电源控制机制,难以实现软复位、故障隔离与功耗优化。本方案基于USB 2.0协议透明转发原理,通过硬件级电子负载开关(如MT9700)与独立MCU(ESP32-C3)协同,构建具备四路独立限流(680mA)、纳秒级通断响应、WiFi/MQTT远程管控能力的智能供电架构。技术价值体现在协议无侵入、控制域与数据域物理隔离、默认安全上电策略等工程实践要点,广泛适用于工业远程调试、实验室设

weixin_36289742的博客 193

Java洛谷团队系统

Java

善良的小乔的博客 766

【数字IC设计】Centos 7桌面版 安装Synopsys EDA Tools

简称DC,是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表。

qiumingT的博客 9793

告别手动!用Python+CATIA V5/V6自动生成三视图和标题栏(附完整代码)

本文详细介绍了如何利用Python和CATIA V5/V6实现工程图自动生成,包括三视图布局和标题栏填写。通过COM接口调用和智能算法,系统能自适应不同尺寸模型,大幅提升设计效率。附完整代码和部署方案,帮助团队实现从手动到自动化的转变。

weixin_42699679的博客 351

洛谷 P1439 最长公共子序列

传送门题目描述给出1-n的两个排列P1和P2,求它们的最长公共子序列。输入输出格式输入格式:第一行是一个数n,接下来两行,每行为n个数,为自然数1-n的一个排列。输出格式:一个数,即最长公共子序列的长度输入输出样例输入样例:5 3 2 1 4 51 2 3 4 5输出样例:3说明【数据规模】对于50%的数据,n≤1000对于100%的数据,n≤100000题解用 二分法求LIS求最长公共子序列(L...

Dawn_LLLLLLL 952

MATLAB实战:手把手教你实现WVD信号分析(附完整代码与避坑指南)

本文通过MATLAB实战,手把手教你实现Wigner-Ville分布(WVD)信号分析。文章提供了从零构建WVD函数的完整代码,并重点解析了使用解析信号、处理交叉项、优化计算效率等关键避坑指南,帮助工程师高效处理非平稳信号,获得高分辨率的时频分析结果。

purple的博客 1081

洛谷 P1439 【模板】最长公共子序列

题目 看了一下数据范围,n2 做法肯定超时。所以仔细看看题目中有什么隐含条件。 它们都是(1~n)的数列。我们可以画一个图来看看它们之间的对应关系。 不难看出找他们的最长公共子序列,就是找他们之间不相交直线的最大数目, 很明显,如果要想不相交,序列a在b中的对应应是单调递增的。这样我们就可以将问题转换成最长上升子序列了。 #include<iostream> #include<...

zailingzhe的博客 275

山景BP10_128DBG开发板ADC_Key驱动

最近在学习山景BP10_128DBG开发板,想使用开发板上的按键。看了看原理图和之前用过的按键好像有点不一样。常见的按键都是判断IO口是否被拉低或拉高来判断按键是否被按下。山景BP10_128DBG开发板上的按键是ADC按键,每个按键按下之后ADC的采样值是不同的,通过ADC采样回来的值进而判断哪个按键按下。这种方式核心思想就是用一个ADC通道来节约IO口,对于IO紧张的芯片是一个不错的解决思路。

weixin_56646002的博客 1308

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1516

洛谷P1439最长公共子序列

传送门 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<vector> #include<map> #include<queue> #include<stack> #include<math.h> #include&l

weixin_45714726的博客 199

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1681

P1439 【模板】最长公共子序列——java

目录题目前言题目分析思考代码结果 题目 https://www.luogu.com.cn/problem/P1439 前言 之前在LeetCode做最长公共子序列是用dp来做的,今天看到洛谷这题,一口气上dp 只有区区50分,太丢脸了 简单分析一下,普通dp做法时间复杂度为O(n^2) 所以即使我用来滚动数组来做,时间还是会爆 因此我需要一种O(nlogn)的算法 题目分析 题目:……接下来两行,每行为 n 个数,为自然数 1,2,…,n 的一个排列。…… 也就是说,在这个排列里,每个数只出现一次

weixin_44655368的博客 626

7、初级视觉皮层(V1)的研究综述

本文综述了初级视觉皮层(V1)的基本功能特性、计算理解、细胞相互作用及理论模型。V1不仅执行方向和空间频率的选择性滤波,还通过相位选择性和上下文调制参与高级视觉处理。研究从信息编码角度解释了V1感受野的形成,并介绍了基于自然图像统计的建模方法。横向与反馈连接揭示了V1在全局视觉整合中的作用,尤其是上下文对细胞响应的快速调节。李的动态模型提出V1可生成视觉显著性图,支持前注意分割和注意力引导。未来研究聚焦于V1在注意力、意识和硬件实现中的潜在应用,推动视觉神经科学与人工智能的交叉发展。

7z8x2c4v6b9的博客 144

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷P1439 【模板】最长公共子序列

题目链接-P1439 【模板】最长公共子序列 #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define int long long #define lowbit(x) (x &(-x)) #define endl '\n' using namespace std; const int INF=0x3f3f3f3f; const int dir[4][2]={-1,0,1,0,0,

Fiveneves的博客 377

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷 P1439 【模板】最长公共子序列

题意: 给出两个1~n的排列 求最长公共子序列

sillyf的博客 499

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最长公共子序列-java实现

之前看过一个LCS算法的实现过程,觉得太过繁琐。自己写了一个比较简单的,此处仅仅介绍实现过程。 程序代码测试通过,需要的童鞋可以在这里拷贝一下,代码如下:package com.wsy.dynamic;import java.util.HashMap; import java.util.Map;public class ImpLCS { public String getLCS(Strin

wengsy_5041的博客 982

P1439 【模板】最长公共子序列

题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列。 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列。 输出格式: 一个数,即最长公共子序列的长度 输入输出样例 输入样例#1:复制 5 3 2 1 4 5 1 2 3 4 5 输出样例#1:复制 3 ...

weixin_30349597的博客 102

洛谷 [p1439] 最长公共子序列 (NlogN)

可以发现只有当两个序列中都没有重复元素时(1~n的排列)此种优化才是高效的,不然可能很不稳定。 求a[] 与b[]中的LCS 通过记录lis[i]表示a[i]在b[]中的位置,将LCS问题转化为最长上升子序列问题,转化方法如下:for(int i=1;i<=n;i++){ local[b[i]]=i; } for(int i=1;i<=n;i++){

Mr_Wolfram的高维空间 716

P1439 【模板】最长公共子序列(LIS)

题目连接:https://www.luogu.com.cn/problem/P1439 思路: 因为题目数据较大,不能用一般的最长相同子序列来求,所以可以将序列1中的编号放到序列2中,在两个序列中都递增的子序列就是最长相同的子序列,所以题目就转化为求转化过的bi串的最长上升子序列就好了。 代码: #include <bits/stdc++.h> using nam...

积少成多,水滴石穿 390

最长公共子序列模板(Java)

for(int i=0;i&amp;lt;n;i++){ for(int j=0;j&amp;lt;m;j++){ if(s[i]==t[j]){ dp[i+1][j+1]=dp[i][j]+1; } else{ dp[i+1][j+1]=Math.max(dp[i][j+1],dp[i+1][j]); } } } System.out.println(dp[n...

FreeGo~ 183

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 187
上一篇: 动态规划(含习题)
下一篇: 洛谷java实现(P1111修复公路)
Wchert
博客等级 码龄7年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值