求解长度利用动态规划,求解数组,记录这个位置的前一个位置的序号索引是谁,这样可以逆序找到最后需要求解的那个最长递增子序列的数组
public class Test {
public static void main(String[] args) {
Test t=new Test();
int[] nums={1,23,4,5,33,8,90,91};
t.lengthOfLIS(nums);
}
public int lengthOfLIS(int[] nums) {
int len=nums.length;
int[] dp=new int[len];//表示以位置i结尾的最长连续的递增子数组的长度
int[] pre=new int[len];//表示这个位置的前一个序号,没有前一个的就记为-1
dp[0]=1;
pre[0]=-1;
int maxlen=1;//真正的最长子序列的长度
int index_end=0;//真正最长的那个递增子数组的最后一个位置
for(int i=1;inums[j]){
if(dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
pre[i]=j;
}
}
}
if(dp[i]>maxlen){
maxlen=dp[i];
index_end=i;
}
}
int[] arr=new int[maxlen];//最后的子序列
int i=index_end;//用于更新前一个位置是谁(可以不断往前定位)
int j=0;
while (j 


