最长单调递增子序列 动态规划 (java)
题目描述:
设计一个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)相关推荐
- 最长单调递增子序列--动态规划
最长单调递增子序列定义: 问题描述: 设计一个O(n2)时间的算法, 找出由n个数组成的序列的最长单调递增子序列. 输入 第1个整数n(0<n<100),表示后面有n个数据,全部为整数. ...
- 输出最长单调递增子序列java_动态规划实现最长单调递增子序列
1. 实验环境 操作系统:Mac 64 运行内存:16GB 编程语言:Java 编译环境:Eclipse 2. 题目要求 设计一个Ο(nlgn)时间的算法,求一个 n 个数的序列的最长单调递增子序列. ...
- java最长单调递增子序列_最长单调递增子序列问题
最长单调递增子序列问题 题目:设计一个 O( n ^ 2 )复杂度的算法,找出由 n 个数组成的序列的最长单调递增子序列. import java.util.Scanner; public class ...
- 动态规划作业 最长单调递增子序列
动态规划作业 1.最长单调递增子序列 设计一个 O(n2)时间的算法,找出由 n 个数组成的序列 a 的最长单调递增子序列. 提示: 用数组 b[0:n]纪录以 a[i] (0<= i< ...
- 最长单调递增子序列 python_最长单调递增子序列
前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...
- 最长单调递增子序列 [转]
[转] http://skynewborn.blog.sohu.com/66594610.html 单调子序列包含有单调递增子序列和递减子序列,不失一般性,这里只讨论单调递增子序列.首先,从定义上明确 ...
- 最长单调递增子序列O(NlogN)算法
O(NlgN)算法 假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5. 下面一步一步试着找出它. 我们定义一个序列B,然后 ...
- 最长单调递增子序列(时间复杂度O(nlogn))
写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步! 最长单调递增子序列 [题目描述] 找出由n个数组成的序列中的最长单调递增子序列及其长度. [O(n*n)算法解题思 ...
- 算法实验-最长单调递增子序列长度
问题描述 解决思路 O(n^2) 首先考虑使用动态规划的方法解决该问题.首先将原问题分解为子问题.对于长度为n的序列(从下标1开始),假设前n-1个元素形成了n-1个以arr[i]结尾的单调递增最长子 ...
最新文章
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
- 文巾解题 14. 最长公共前缀
- 为什么int型的数组用memset不能清零(memset的使用规范)
- Xshell、Xftp入门使用
- html图片拼接出现留白,关于img标签周围留白的问题
- 目标检测之YOLO V2 V3
- python找到文件夹下指定文件_python实现在目录中查找指定文件的方法
- 设计模式——行为型模式
- Swarm(bzz)软启动版本v.0.0-rc2
- 全国计算机等级考试报名支付不了,23日起,全国计算机等级考试开始网上报名...
- 数据库四种范式和部分依赖,完全依赖,传递依赖
- Nmap的下载与基本命令运用
- 地级市空气污染、空气质量、PM2.5日度数据
- 小程序遵循的语法_2020年遵循的最佳应用程序开发实践
- 前端学习日记3-如何设置网页背景图片
- 3蛋白wb_干货分享:三个蛋白组学数据库的应用
- HTML设计简单的教务管理系统
- PCA(主成分分析)
- JDK8安装 及 环境变量配置(新手向)
- SOJ 4590 简单模拟
热门文章
- 关于pytorch调试中出现的Module 'torch' has no 'name' member
- [时空与预测]星际迷航-暗黑无边
- c++奔跑的火柴人游戏
- 架构师成长之路 1 --什么是架构师
- 笔试题————网络安全、web安全、渗透测试之笔试总结(二)
- 操作系统内核开发:实现定时器功能
- java 技术训练营 宋红康老师、 佟刚老师 金牌讲师课件分享
- 旷视天元 MegEngine 开源 CUDA INT4 量化源码实现
- 围棋术语 中英文 。
- steam 32位 linux 下载,Steam将停止支持基于32位兼容性的Ubuntu Linux