java最长递增子序列_JAVA最长递增子序列「建议收藏」

java最长递增子序列_JAVA最长递增子序列「建议收藏」问题描述LIS(LongestIncreasingSubsequence,最长递增子序列):给出一个序列a1,a2,a3,a4,a5,a6,a7…an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1最长递增子序列实例分析17359481最长递增子序列算法设计设b[i]是在a[i]为单调递增子序列最后一个元素时,所得最长单调递增…

大家好,又见面了,我是你们的朋友全栈君。

问题描述  LIS(Longest Increasing Subsequence,最长递增子序列):给出一个序 列a1,a2,a3,a4,a5,a6,a7…an,求它的一个子序列(设为s1,s2,…sn),使得这个 子序列满足这样的性质,s1

最长递增子序列

实例分析 1 7 3 5 9 4 8 1

最长递增子序列

 算法设计  设b[i]是在a[i]为单调递增子序列最后一个元素时,所得最长单调递增子序列 的长度

  

 

i)j1a[i]if(a[j] 1max(b[j]) 1)if(i 1

b[i]

最长递增子序列

 算法设计  a数组存储原始数据  b数组存储对应最长上升子序列长度

i 1 2 3 4 5 6 7 a[i] 1 7 3 5 9 4 8 b[i]初始值 1 1 1 1 1 1 1 b[i] 1 2 2 3 4 3 4

最长序列长度

1 7 3 5 9 4 8

i 1 2 3 4 5 6 7“

a[i] 1 7 3 5 9 4 8

b[i] 1 2 2 3 4 3 4

pre[i] 0 1 1 3 4 3 6

package book;

import java.util.Scanner;

public class 最长公共子序列 {

static int n;

static int a[];//原始数据

static int b[];//存放最长的序列长度

static int c[];//

static int pre[];//存放前一个数据编号

static int max;

static int lab;//存储最长子序列的最后一个元素的位置

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

n=sc.nextInt();

a=new int[n+1];

b=new int[n+1];

c=new int[n+1];

pre=new int[n+1];

for(int i=1;i<=n;i++) {

a[i]=sc.nextInt();

}

slove();

System.out.printf(“%d\n”,max);

//输出数列O(n)

for(int i=1;i<=max;i++) { System.out.printf(“%d,”,c[i]); }

}

private static void slove() {

b[1]=1;//第一个数字本身长度为1;

for(int i=2;i<=n;i++) {

max=0;

for(int j=i-1;j>=1;j–) {

if(a[j]max) {

max=b[j];//要这个数的关键是

pre[i]=j;

}

}

b[i]=max+1;

}

max=b[1];

for(int i=2;i<=n;i++) {

if(b[i]>max) {

max=b[i];

lab=i;

}

}

int i=lab;

int num=max;

int j=max;

//将a数组复制到c数组

while(num>0) {

c[j]=a[i];

j–;

i=pre[i];

num–;

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132191.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java打印数组常用的几种方法[通俗易懂]

    java打印数组常用的几种方法[通俗易懂]java打印数组常用的几种方法1、使用for循环最”朴实无华“的方法,却也是屡试不爽的方法,直接打印变量名不成,逐个遍历打印一定是可以的!int[]intArray={1,2,3};for(inti=0;i<intArray.length;i++)System.out.println(intArray[i]);如果是多维数组的话,使用多层for循环嵌套就可以了。2、使用Arrays.toString()或Arrays.deepToString()对

  • oauth 流程_简明同义词典

    oauth 流程_简明同义词典SSO:用户一次登陆后在多个系统免登录。博客gem'doorkeeper'https://i.cnblogs.com/EditPosts.aspx?postid=9255973

  • linux hook技术[通俗易懂]

    linux hook技术[通俗易懂]Hook中文翻译为钩子,可以用来截获调用函数,并改变函数的行为。Windows和Linux都提供了相应的实现机制。这篇文章是针对Linux平台的。也是在学习协程库libco过程中接触到的。正文:如果你是一个开发者,并期望去改变一个库函数的行为,那么这篇文章将带你入门——只是用库函数做实验。所有的代码是用C写的,在Linux上面使用GCC编译测试。根据维基百科,“在计算机…

  • linux menuconfig搜索,linux–menuconfig

    linux menuconfig搜索,linux–menuconfig|–linux内核中Makefile,Kconfig,.config的关系(1)三者的作用简单来说就是去饭店点菜:Kconfig是菜单,Makefile是做法,.config就是你点的菜Makefile:一个文本形式的文件,编译源文件的方法。Kconfig:一个文本形式的文件,内核的配置菜单。.config:编译所依据的配置。(2)三者的语法|–Makefile目标定义:目标定义就是用来定义哪…

  • php storm2021.10激活码(JetBrains全家桶)「建议收藏」

    (php storm2021.10激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlH2AE5L25Z5-eyJsa…

  • Mac 卸载Java「建议收藏」

    Mac 卸载Java「建议收藏」Mac彻底卸载Javamac上终端安装了太多的JavaJDK版本,计划全部删除,重新安装最新版本JDK。打开终端输入以下命令://1、移除JavaAppletPlugin.plugin与JavaControlPanel.prefpanesudorm-fr/Library/Internet\Plug-Ins/JavaAppletPlugin.pluginsudorm-fr/Library/PreferencesPanes/JavaControlPanel.prefpane

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号