最长递增子序列
来源:互联网 发布:淘宝上的中药能买吗 编辑:程序博客网 时间:2024/06/15 03:09
问题:
给定一个整数数组,返回数组的最长递增子序列
分析:
设原数组为a, 将a排序得到b, 则 a 和 b 的最长公共子序列就是数组的 a 的最长递增子序列
package javainterview.string;import java.util.Arrays;public class LIS {public static String lis(int[] arr){if(arr==null || arr.length == 0)return null;int[] sortArr = Arrays.copyOf(arr, arr.length);Arrays.sort(sortArr);return lcs(arr, sortArr);}//最长公共子序列public static String lcs(int[] a, int[] b){int[][] dp = new int[a.length+1][b.length+1];for(int i=0; i< a.length; i++){for(int j=0; j< b.length; j++){if(a[i] == b[j])dp[i+1][j+1] = dp[i][j]+1;elsedp[i+1][j+1] = Math.max(dp[i+1][j], dp[i][j+1]);}}StringBuilder sb = new StringBuilder();int x = a.length;int y = b.length;while(x!=0 && y!=0){if(dp[x][y] == dp[x-1][y])x--;else if(dp[x][y] == dp[x][y-1])y--;else{sb.append(a[x-1]);x--;y--;}}return sb.reverse().toString();}public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = {0,5,6,7,2,3,4};String res = lis(arr);System.out.println(res);}}
0 0
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 一步一步教你使用CGI实现一个简单的后门
- Linux内核启动参数传递
- php 组合算法(从n个数中取出m个元素进行组合,不考虑排序和元素重复)
- Java复制文件
- mysql 锁
- 最长递增子序列
- 用户界面View之Chronometer
- win7 64位系统怎么使用debug命令
- Python "Attribute" Definition
- A == B ?
- addActionListener(this)
- Ubuntu 15.04 开发计划确定 最终发布日期2015年4月23日
- 删除linux系统中的eth0.bak与多余的网卡
- windows server 2008 r2 下的VMware虚拟机共享主机上网