最长有序子序列
2015-12-13 22:28
239 查看
什么是最长有序子序列呢?
首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。
比如有如下数组:
其中F[I]存的是以NUM[I]结尾的子序列的最长长度。
上面看懂了,求一个数组的最长有序子序列就容易了,代码如下:
首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。
比如有如下数组:
I | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Num[I] | 1 | 4 | 7 | 2 | 5 | 8 | 3 | 6 | 9 |
F[I] | 1 | 2 | 3 | 2 | 3 | 4 | 3 | 4 | 5 |
上面看懂了,求一个数组的最长有序子序列就容易了,代码如下:
public class Test { public static void main(String[] args) { int[] num = new int[]{1,4,7,2,5,8,3,6,9}; int[] f = new int[num.length]; for (int i = 0;i < num.length;i++) { f[i] = 1; } int max = f[0]; for (int i = 1;i < num.length;i++) { for (int j = 0;j < i;j++) { //更新条件,1是有序,2是长度能变长 if (num[i] >= num[j] && f[i] < f[j] + 1) { f[i] = f[j] + 1; if (f[i] > max) { max = f[i];//更新最长的长度 } } } } System.out.println(max); } }
相关文章推荐
- ZOJ 2201 2186 2176
- 用代码如何知道当前正在使用的哪个数据库?
- AngularJS 数组
- 使用CXF开发简单的Web Service-HelloWorld(二)
- Android Circular Progress Button
- WPF应用
- Oracle 数据库 数据文件 表 表空间 用户的关系
- 第三个Sprint冲刺第九天
- 手机小闹钟需求分析
- Web Service简介(一)
- golang中时间包time函数和demo
- APUE fig 1.10示例代码的完善--对提示符及输入回车的优化
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
- 在微软学到的几个小技能--孙鹏(MIUI初创工程师)
- android studio快捷键大全
- 信息安全系统设计基础第十四周学习总结
- C# 跨线程访问或者设置UI线程控件的方法
- 教你轻松计算AOE网关键路径(转)
- 学习51单片机——秒表分享
- 配置文件参数设计