(动态规划)最长递增子列

先来看问题,

最长递增子列。

即数组中按顺序拿出n个数,(按照原来的顺序)该子数列为递增数列。

例如:1 2 3 -1数列最后结果为3.最对应数列很显然为1 2 3

(注,只输出长度。)

当然如果还需要对应坐标对算法进行稍加改动即可

这里主要是对思路进行理解

废话少说 下面我们开始讲解大致思路 (动态规划)

我们对数组的前n个数即第一个,第二个 第n个 分别求出以第一个,第二个, 第n好个结尾的最长连续递增子序列 那么,当我们输入第n+1个数时我们只需往前比较,找到比第n+1位小的数 ,记做第X位 ,由于我们已经得到以第X位为结尾的最长连续递增子序列的长度(记做Y) 所以 我们的以n+1位位结尾的最长连续递增子序列即为Y+1

我们依次向前对比 记录比n+1为小的 并且对应长度的最最大值 加一即可

所以我们从第一位往后知道遍历结束 就可以得出以每一位为结尾的最长连续递增子序列的长度。 故我们就可以得出结果

当然你也可以得出对应序列 这里对得出序列的步骤就不具体讲了

下面 我们看具体代码

package abc;

import java.util.Map;
import java.util.Scanner;

public class zcdzzxl {
  //最长递增子序列

  public static int gerLong(int[] a){//返回最长递增子列的长度
    if (a==null || a.length==0){
      return 0;
    }//特殊情况
    //求长度方法
    int Max=1;
    int max;
    int i,j;
    int[] n=new int[a.length];
    n[0]=1;
    for (i=1;i){
      max=0;
      for (j=i-1;j>=0;j--){
        if (a[i]>a[j]){
          if (n[j]>max){
            max=n[j];
          }
        }
      }
      n[i]=max+1;
      if (n[i]>Max){
        Max=n[i];
      }
    }
    putArray(a,n,Max);
    //此处调用输出函数
    return Max;//返回长度
  }

  public static void putArray(int[] Array,int[] array ,int longest){
    int i,j=0;
    int max;
    for (i=array.length-1;i>=0;i--){

      if (array[i]==longest){
        j=i;
        break;
      }

    }//寻找递增子列的最后一个数的下标
    int[] to=new int[longest];//存储子列
    to[--longest]=Array[j];
    for (i=j-1;i>=0;i--){
      if (Array[i]longest){
        to[--longest]=Array[i];
      }
    }

    System.out.println("子列为: ");
    for (i=0;i){
      System.out.print(to[i]+"  ");
    }//当然 对于同一个数组,对应的子列 也可能不唯一
  }

  public static void main(String [] args){
    Scanner in=new Scanner(System.in);
    System.out.println("输入测试数组长度");
    int n=in.nextInt();

    System.out.println("请依次输入数组内容");
    int[] test=new int[n];
    for (int i=0;i){
      test[i]=in.nextInt();
    }
    System.out.println("测试得到的最长递增子列长度为"+gerLong(test));

  }

}

(动态规划)最长递增子列

这是测试输出结果图

这里也写了输出具体序列的代码 可以自己研究一下

如果有什么不对的地方 或者不太看的懂的地方 评论区留言

谢 !!

Original: https://www.cnblogs.com/cndccm/p/12207796.html
Author: Mr小明同学
Title: (动态规划)最长递增子列

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573028/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 花生壳内网穿透

    Original: https://www.cnblogs.com/weiapro/p/7688796.htmlAuthor: 天涯越野Title: 花生壳内网穿透

    Java 2023年6月13日
    059
  • GeoHash(Java实现)

    java;gutter:true; package com.koubei.collect_script.demo;</p> <p>import java.u…

    Java 2023年5月29日
    081
  • Java-Stream流方法学习及总结

    1 前言 Stream是一个来自数据源的元素队列并支持聚合操作,其中具有以下特性: Stream只负责计算,不存储任何元素,元素是特定类型的对象,形成一个队列 数据源可以实集合、数…

    Java 2023年6月8日
    068
  • 【java】[文件上传jar包]commons-fileUpload组件解决文件上传(文件名)乱码问题

    response.setContentType(“text/html; charset=UTF-8”);Boolean isMultipart = Serv…

    Java 2023年5月29日
    086
  • SpringBoot给指定控制器Controller请求添加请求前缀

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework….

    Java 2023年5月30日
    088
  • 分析 java.util.LinkedHashMap

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    071
  • 教学日志:javaSE-流程控制语句

    import java.util.Scanner; //导包 /* java流程控制语句: 单分支结构: 只有一个条件,符合就执行 双分支结构: 有两个条件,符合哪个就执行哪个语句…

    Java 2023年6月5日
    065
  • java_包装类

    1.基本数据类型对于的包装类型如下: 2.Object类: 1.在 Java 中所有的类都有一个公共的父类 Object,一个类只要没有明显的继承一个类,则肯定是 Object 的…

    Java 2023年6月5日
    079
  • Java线程池中线程的状态简介

    首先明确一下线程在JVM中的各个状态(JavaCore文件中) 1.死锁,Deadlock(重点关注) 2.执行中,Runnable(重点关注) 3.等待资源,Waiting on…

    Java 2023年6月15日
    063
  • HIT软构博客7–学习UML类图

    UML的各种线和箭头到底是什么意思 1 泛化泛化表示⼀个更泛化的元素和⼀个更具体的元素之间的关系。即继承extends ⽤实线空⼼三角形箭头表⽰。箭头方向从子类到父类。 2实现 实…

    Java 2023年6月5日
    059
  • Spring Security

    下面这个可以参考: posted @2022-07-06 18:30 戈博折刀 阅读(11 ) 评论() 编辑 Original: https://www.cnblogs.com/…

    Java 2023年5月30日
    087
  • Spring 源码(10)Spring Bean 的创建过程(1)

    Spring Bean的创建刚开始进行了一些准备工作,比如转换服务的初始化,占位符解析器的初始化, BeanDefinition元数据的冻结等操作,都是为了在创建Bean的过程中保…

    Java 2023年6月14日
    067
  • Java面向对象(五)

    Java面向对象(五) Java面向对象(五) – 十六、面向对象特征之三: 多态性 16.1 多态性的定义: 16.2 多态性的使用: 16.3 多态典型例题 十七、…

    Java 2023年6月9日
    060
  • 最好的Java开发工具—IDEA

    IDEA的使用 IntelliJ IDEA工具的使用 1. 常见的Java集成开发工具 Eclipse IBM团队研发的一个开源的非常好用的集成开发环境。寓意:吞并Sun公司。不过…

    Java 2023年6月7日
    073
  • SpringMVC学习笔记

    本文转载自尚硅谷杨博超老师的笔记,视频链接–>哔哩哔哩 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划…

    Java 2023年6月8日
    071
  • 12.Zuul网关

    Zuul简介 网关介绍 由于微服务”各自为政的特性”使微服务的使用非常麻烦 通常我们会雇佣一个”传达室大爷”作为统一入口,这就是网关…

    Java 2023年6月8日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球