题目描述:

设计一个O(N^2)算法,找出n个数据组成的序列的最长单调递增子序列。

输入示例:

8
1 2 3 -9 3 9 0 11

输出示例:

5
1 2 3 9 11

设计思路:

有一个数组 a[n],用 dp[i] 表示以 a[i] 结尾的最长单调子序列的长度,可以知道初始化值为1,如果存在比 a[i] 小的数 a[j] 满足a[j] < a[i] 且 j<i 且 dp[j] + 1 > dp[i],则产生新的最长子序列,可以得到递推公式:dp[i] = max (1, dp[j] + 1),需要从1到 i - 1枚举 j 的值求最大值。时间复杂度:O(N^2)

Java代码:

import java.util.Scanner;/*** 动态规划,求最长单调递增子序列*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n;n = scanner.nextInt();//存放最长子序列的长度int[] dp = new int[n];int[] a = new int[n];int maxLength = -1; //最长长度int maxIndex = -1; //递增最长子序列的最后一值的下标int[] preIndex = new int[n]; //每一个dp[i]的前一个值的下标for(int i = 0; i < n; i++) {a[i] = scanner.nextInt();//初始值为1,即只有一个值时的长度dp[i] = 1;preIndex[i] = -1;}for(int i = 0; i < n; i++) {for(int j = 0; j < i; j++) {if(a[j] < a[i] && (dp[j] + 1) > dp[i]) {dp[i] = dp[j] + 1;preIndex[i] = j;}}if(dp[i] > maxLength) {maxLength = dp[i];maxIndex = i;}}System.out.println(maxLength);int[] res = new int[maxLength];for(int i = maxIndex, j = 0; i != -1; j++) {res[j] = a[i];i = preIndex[i];}for(int i = res.length - 1; i >= 0; i--) {System.out.print(res[i] + " ");}}
}

最长单调递增子序列 动态规划 (java)相关推荐

  1. 最长单调递增子序列--动态规划

    最长单调递增子序列定义: 问题描述: 设计一个O(n2)时间的算法, 找出由n个数组成的序列的最长单调递增子序列. 输入 第1个整数n(0<n<100),表示后面有n个数据,全部为整数. ...

  2. 输出最长单调递增子序列java_动态规划实现最长单调递增子序列

    1. 实验环境 操作系统:Mac 64 运行内存:16GB 编程语言:Java 编译环境:Eclipse 2. 题目要求 设计一个Ο(nlgn)时间的算法,求一个 n 个数的序列的最长单调递增子序列. ...

  3. java最长单调递增子序列_最长单调递增子序列问题

    最长单调递增子序列问题 题目:设计一个 O( n ^ 2 )复杂度的算法,找出由 n 个数组成的序列的最长单调递增子序列. import java.util.Scanner; public class ...

  4. 动态规划作业 最长单调递增子序列

    动态规划作业 1.最长单调递增子序列 设计一个 O(n2)时间的算法,找出由 n 个数组成的序列 a 的最长单调递增子序列. 提示: 用数组 b[0:n]纪录以 a[i] (0<= i< ...

  5. 最长单调递增子序列 python_最长单调递增子序列

    前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...

  6. 最长单调递增子序列 [转]

    [转] http://skynewborn.blog.sohu.com/66594610.html 单调子序列包含有单调递增子序列和递减子序列,不失一般性,这里只讨论单调递增子序列.首先,从定义上明确 ...

  7. 最长单调递增子序列O(NlogN)算法

     O(NlgN)算法 假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5.  下面一步一步试着找出它.  我们定义一个序列B,然后 ...

  8. 最长单调递增子序列(时间复杂度O(nlogn))

    写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步! 最长单调递增子序列 [题目描述] 找出由n个数组成的序列中的最长单调递增子序列及其长度. [O(n*n)算法解题思 ...

  9. 算法实验-最长单调递增子序列长度

    问题描述 解决思路 O(n^2) 首先考虑使用动态规划的方法解决该问题.首先将原问题分解为子问题.对于长度为n的序列(从下标1开始),假设前n-1个元素形成了n-1个以arr[i]结尾的单调递增最长子 ...

最新文章

  1. MySQL · 引擎特性 · InnoDB 崩溃恢复过程
  2. 文巾解题 14. 最长公共前缀
  3. 为什么int型的数组用memset不能清零(memset的使用规范)
  4. Xshell、Xftp入门使用
  5. html图片拼接出现留白,关于img标签周围留白的问题
  6. 目标检测之YOLO V2 V3
  7. python找到文件夹下指定文件_python实现在目录中查找指定文件的方法
  8. 设计模式——行为型模式
  9. Swarm(bzz)软启动版本v.0.0-rc2
  10. 全国计算机等级考试报名支付不了,23日起,全国计算机等级考试开始网上报名...
  11. 数据库四种范式和部分依赖,完全依赖,传递依赖
  12. Nmap的下载与基本命令运用
  13. 地级市空气污染、空气质量、PM2.5日度数据
  14. 小程序遵循的语法_2020年遵循的最佳应用程序开发实践
  15. 前端学习日记3-如何设置网页背景图片
  16. 3蛋白wb_干货分享:三个蛋白组学数据库的应用
  17. HTML设计简单的教务管理系统
  18. PCA(主成分分析)
  19. JDK8安装 及 环境变量配置(新手向)
  20. SOJ 4590 简单模拟

热门文章

  1. 关于pytorch调试中出现的Module 'torch' has no 'name' member
  2. [时空与预测]星际迷航-暗黑无边
  3. c++奔跑的火柴人游戏
  4. 架构师成长之路 1 --什么是架构师
  5. 笔试题————网络安全、web安全、渗透测试之笔试总结(二)
  6. 操作系统内核开发:实现定时器功能
  7. java 技术训练营 宋红康老师、 佟刚老师 金牌讲师课件分享
  8. 旷视天元 MegEngine 开源 CUDA INT4 量化源码实现
  9. 围棋术语 中英文 。
  10. steam 32位 linux 下载,Steam将停止支持基于32位兼容性的Ubuntu Linux