最长递增子序列,时间复杂度(O(nlogn))
来源:互联网 发布:淘宝上可以改造户型吗 编辑:程序博客网 时间:2024/06/05 00:42
package com.kailong.datastures;import java.util.Arrays;/** * Created by Administrator on 2017/4/17. * 最长递增子序列 */public class FindMaxIntLong { public static int[] getList1(int []arr){ if(arr==null||arr.length==0){ return null; } int []dp=getdp1(arr); System.out.println(Arrays.toString(dp)); return generateLIS(arr,dp); } private static int[] generateLIS(int[] arr, int[] dp) { int len=0; int index=0; for(int i=0;i<dp.length;i++){ if(dp[i]>len){ len=dp[i]; index=i; } } int[] lis=new int[len]; lis[--len]=arr[index]; for(int i=index;i>=0;i--){ if(arr[i]<arr[index]&&dp[i]==dp[index]-1){ lis[--len]=arr[i]; index=i; } } return lis; } private static int[] getdp1(int[] arr) { int[] dp=new int[arr.length]; for(int i=0;i<arr.length;i++){ dp[i]=1; for(int j=0;j<i;j++){ if(arr[i]>arr[j]){ dp[i]=Math.max(dp[i],dp[j]+1); } } } return dp; } private static int [] getdp2(int []arr){ int[] dp=new int[arr.length]; int [] ends=new int[arr.length]; ends[0]=arr[0]; dp[0]=1; int right=0,l=0,r=0,m=0; for(int i=1;i<arr.length;i++){ l=0; r=right; while (l <= r) { m = (l + r) / 2; if (arr[i] > ends[m]) { l = m + 1; } else { r = m - 1; } } right = Math.max(right, l); ends[l] = arr[i]; dp[i] = l + 1; } return dp; } private static int[] getList2(int[] arr) { if(arr==null||arr.length==0){ return null; } int []dp=getdp2(arr); System.out.println(Arrays.toString(dp)); return generateLIS(arr,dp); } public static void main(String []args){ int [] ss={2,3,6,3,7,2,7,9,4,0,1,34,56,3,0,2,2,2,4,77,84,3838,2,288,1727,16,67,2,87282,8228,22,82,2,81,8,34,5,8}; int[] result1 = getList1(ss); int []result2=getList2(ss); System.out.println(Arrays.toString(result1)); System.out.println(Arrays.toString(result2)); }}
0 0
- 最长递增子序列,时间复杂度(O(nlogn))
- 最长递增子序列O(NlogN)
- O(nlogn)最长递增子序列
- 最长递增子序列O(Nlogn)
- 算法_动态规划_最长单调递增子序列问题(O(nlogn)的时间复杂度)
- 时间复杂度为O(nlogn)的最长单调递增子序列
- 【难】求数组中最长递增子序列,时间复杂度O(nlogn)
- 最长递增子序列 LIS 时间复杂度O(nlogn)的Java实现
- POJ 2533最长递增子序列O(nlogn) 算法
- 最长单调递增子序列O(NlogN)算法
- 最长递增子序列O(NlogN)算法
- hdu 5532【最长非递增子序列 时间复杂度 nlogn】
- POJ2533, 最长上升子序列(贪心+二分查找时间复杂度O(nlogn))
- 最长递增子序列(nlogn)
- 模板[最长递增子序列] O(nlogn)
- 最长递增子序列 O(NlogN)算法
- 最长递增子序列 O(NlogN)算法
- 最长递增子序列 O(nlogn)
- Http请求、响应
- selenium的API
- oj 3014 文件格式变换
- 关于Android实现裁剪功能总结
- POJ 1986 Distance Queries(LCA在线和离线)
- 最长递增子序列,时间复杂度(O(nlogn))
- CSS——“圣杯式布局”
- C++ 文件读写
- Mysql开启慢查询日志
- ASP.NET 复杂JSON字符串反序列化操作
- VS2015启动遇到的一些问题和解决方法
- Linux + C + Epoll实现高并发服务器(线程池 + 数据库连接池)
- 64位WIN10操作系统+VS2010安装openssl总结教程
- 动态规划 19题