AcWing 895. 最长上升子序列 java
原题链接
简单
作者:
莫得感情的刷题机器
,
2020-08-17 19:24:51
,
所有人可见
,
阅读 356
/**
* LIS 问题
* 时间复杂度 o(n^2),一共n个状态,每个状态平均要从前面o(n)的状态转移,转移的时间复杂度是o(n),所以时间复杂度是o(n^2)。
* f[i]:表示以i结尾的最长上升子序列的长度。
* f[i]= max(f[i-1],f[i-2]...)+1; f[0]=1;
*/
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] f=new int[n+1];
int [] arr=new int[n+1];
arr[0]=-0x3f3f3f3f;//给0一个无穷小,如果不是从1开始,从0开始那么后面f[i]先赋值一个1。
for(int i=1;i<=n;i++) arr[i]=sc.nextInt();
for(int i=1;i<=n;i++){
int j=i-1;
while(j>=0){
if(arr[j]<arr[i]) f[i]=Math.max(f[j]+1,f[i]);
j--;
}
}
int res=0;
for(int i=1;i<=n;i++) res=Math.max(res,f[i]);
System.out.println(res);
}
}
我变成了没情感的机器,咋办
老哥 我已经是一个行走的刷题机器了