最长单调递增子序列 python_最长单调递增子序列
前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧。在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP——最长单调递增子序列。
题目如下:
计算一个给定整数序列的最长单调递增子序列的长度(最优值)及该序列内容(最优解)。给定一个序列X={x1,x2,…xn},{xi1,xi2,…,xim}称为X的一个长度为m的单调递增子序列,如果满足i1
思路我就不作太多的分析了就一个最简单普通的DP问题,代码里有注释,考虑到osc上好多童鞋对java代码感兴趣所以这次贴的是java代码。下面的代码的时间是O(n*n)不是最优,但是好理解,优化的可以将顺序查找改为二分查找
代码如下:
/*
* 最长单调递增子序列
* 1)用一个数组b[n]记录以a[i]结尾的最长单调递增子序列的长度;
* 2)序列的a的最长单调子序列的长度为max{b[i],0=
* 3)b[i] = max{b[k],a[k]<=a[i]&&0=
*
* auther:thj
*/
public class LIS
{
private int[] a;
private int[] b;
public LIS(int[] a)
{
this.a = a;
b = new int[a.length];
}
public void lis()
{
b[0] = 1;
for (int i = 0; i < a.length; i++)
{
int k = 0;
for (int j = 0; j < i; j++)
{
if (a[j] <= a[i] && k < b[j])
{
k = b[j];
}
}
b[i] = k + 1;
}
int k = max(b);
//输出结果
print(k);
}
//求数组中最大值下标
private int max(int[] b)
{
int max = b[0];
int k = 0;
for (int i = 0; i < b.length; i++)
{
if (max < b[i])
{
max = b[i];
k = i;
}
}
return k;
}
//输出
public void print(int k)
{
for (int i = k - 1; i >= 0; i--)
{
if (b[k] == b[i] + 1 && a[i] <= a[k])
{
print(i);
break;
}
}
System.out.print(a[k] + " ");
}
public static void main(String[] args)
{
int[] a = {5, 2, 4, 6, 5, 1, 8};
LIS lis = new LIS(a);
lis.lis();
}
}
最长单调递增子序列 python_最长单调递增子序列相关推荐
- 最长回文子串python_最长回文子串(Python)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...
- c语言最长递增子序列nlogn,最长递增子序列
问题定义: 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6, ...
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...
- 动态规划(最长递增子序列)---最长递增子序列
最长递增子序列 300. Longest Increasing Subsequence (Medium) 题目描述: 给定一个数组,找到它的最长递增子序列 思路分析: 动态规划思想,定义一个数 ...
- 最长公共子序列、最长连续公共子序列、最长递增子序列
面试中除了排序问题,还会经常出现字符串的子序列问题,这里讲解使用动态规划解决三个常见的子序列问题: 1.最长公共子序列问题(LCS,longest-common-subsequence problem ...
- 数组的最长递减子序列java_最长递增/递减子序列
<编程之美>里有个题目是要求数组中最长递增子序列,在CSDN上看到的题目是数组中的最长递减子序列.题目如下: 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子 ...
- 字符串最长公共子序列python_求解两个字符串的最长公共子序列
一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB 则这两个字符串的最长公共子序列长 ...
- 求序列最长不下降子序列_最长不下降子序列nlogn算法详解
今天花了很长时间终于弄懂了这个算法--毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子 ...
最新文章
- 十大python开发软件-必看 | 2020年,Python十大应用领域介绍!
- CISCO ASA 防火墙 IOS恢复与升级
- mysql数据库的行级锁有几种_mysql锁之三种行级锁介绍
- 物联网软件IoT.js、JerryScript、Smart.js、Calvin介绍
- UAA服务基础环境搭建
- 华为可以分屏吗_华为手机经常弹出“系统更新”提示,可以不更新吗?看完涨知识了...
- 华为nova9 SE官网上架:华为首款1亿像素手机
- windows一键安装oracle,Oracle在Windows下快速搭建
- 文件打印服务器解决方案
- php 简易教学管理系统
- url 转码 java_URL 转码遇到的坑
- 2020-11-30 DOA估计/方向谱分析 中文书单
- 英伟达辟谣 RTX 3060 被破解传闻
- java https双向验证_Https双向验证与Springboot整合测试-人来人往我只认你
- 【Java:JDBC+MySQL实现学生信息管理系统】
- 马云被骗十亿?最后却被百倍奉还。
- 自然语言处理——谷歌BERT模型深度解析
- android清单文件的作用,Android 清单文件
- 并购之后 新联想面临的四十个难题(转发)--市场营销
- 如何在Windows终端中使用电力线,书呆子字体,Cascadia代码,WSL和oh-my-posh进行漂亮提示