校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 动态规划算法
题目

给定一个整数数组,求最大递增子序列的长度。
如 数组a[1,3,-2,7,-1,8]的最大递增子序列是[1,3,7,8],长度为4 

解答

思路:

一般算法解决不了,考虑中间状态

      ·设LIS[i]为到第i个数时的最大子序列长度

      ·则有LIS[i] = max{1, LIS[k] +1}, 其中k<i,且a[i]>a[k],

      ·即对下标比i小的每一个位置的LIS值做比较,如果a[i]>a[k]时, LIS[k]+1,取里面的最大值; 如果a[i]最小,则记为1。

      ·边界值是LIS[0] = 1

核心代码:

int LIS(int []a, int n)
{
int []LIS = new int[n];
LIS[0] = 1;
for(int i = 0 ; i < n ; i++)
{
LIS[i] = 1;
for(int j = 0 ; j<i; j ++)
{
if(a[i] > a[j] && LIS[j] + 1 > LIS[i])
LIS[i] = LIS[j] + 1;
}
}

int max = 0;
for (int i = 0; i<n ; i ++)
{
if(LIS[] > max)
max = LIS[i]
}
return max;

}

C 3条回复 评论
一只北极的企鹅

又搞定一个知识盲区

发表于 2021-09-12 18:00:00
0 0
山山而川明明如月

写的不错 共勉~,最近也在开始写博客。大佬们来翻牌啊!

发表于 2021-09-11 20:20:00
0 0
刘玮

这道题属于最难得那一级

发表于 2021-01-17 21:36:21
0 0