最长递增子序列
来源:互联网 发布:搜狗关键词优化排名 编辑:程序博客网 时间:2024/05/20 01:47
package com.lyf.dp;import org.junit.Test;/** * Created by fangjiejie on 2017/5/16. */public class LongestIncreaSubsequences { public static int[] getdp(int arr[]){ int dp[]=new int[arr.length]; for(int i=0;i<arr.length;i++){//从左向右 找以当前元素为最大值而结尾时的序列中,最长递增子序列的长度 dp[i]=1; for(int j=i-1;j>=0;j--){//找倒数第二个数,谁的递增子序列最大,选谁 if(arr[i]>arr[j]) { dp[i] = Math.max(dp[i], dp[j] + 1); } } } return dp; } public static int[] getSubsequence(int arr[]){ int dp[]=getdp(arr); System.out.print("dp数组元素:"); for(int i:dp){ System.out.print(i+","); } System.out.println(); int lenth=0; int index=0; //int mval for(int i=0;i<dp.length;i++){ if(dp[i]>lenth){ lenth=dp[i];//寻找最长递增子序列的长度 index=i;//找递增序列最大长度所在的元素索引 } } int []result=new int[lenth];//创建结果数组 result[--lenth]=arr[index]; for(int j=index-1;j>=0;j--){ if(dp[j]==dp[index]-1&&arr[j]<arr[index]){//如果当前元素dp值=后一个元素dp-1,而且元素值比后一个元素值小,则被找到 //System.out.println("index:"+index); result[--lenth]=arr[j]; index=j;//记录新找到的元素的索引,在下次寻找中作比较,此行为并不影响j值的迭代, } } return result; } @Test public void test(){ int arr[]={5,2,3,7,8,4,6,9}; System.out.print("原数组:"); for(int i:arr){ System.out.print(i+","); } System.out.println(); int res[]=getSubsequence(arr); System.out.print("最长递增子序列:"); for(int i:res){ System.out.print(i+","); } }}
阅读全文
1 0
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- Git|从隐藏项中获取指定文件
- IT基础20
- 反射中Class.forName()和ClassLoader.loadClass()的区别
- 套接字(全双工)实现进程间通信
- 583. Delete Operation for Two Strings
- 最长递增子序列
- Spring Boot学习(四)
- springMVC系列(三)——异常统一处理
- ubuntu 安装 repo 记录
- redis操作
- 【转】整理:深度学习 vs 机器学习 vs 模式识别
- Spring详解
- 一步一步学MySQL---18 MySQL常用函数(1)
- Activity与Fragment通信 多接口实现优化