数组的最长递增 子序列

来源:互联网 发布:c语言 什么方向前景好 编辑:程序博客网 时间:2024/06/07 15:24
以下是n的方法
import java.util.Arrays;import java.util.Scanner;/** * @Title: Longest_Up.java * @Package * @Description: TODO * @author nutc * @date 2013-9-8 下午7:16:34 * @version V1.0 */public class Longest_Up {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n;while (sc.hasNext()) {n = sc.nextInt();int[] now = new int[n];for (int i = 0; i < n; i++)now[i] = sc.nextInt();System.out.println(find1(now));}}// public static int find(int[] num){// if(num==null) return 0;//// int big=1;//// int min = num[num.length-1];// for(int i=num.length-2;i>=0;i--){// if(num[i]<min){// min=num[i];// big++;// }// }// return big;// }public static int find1(int[] num) {if (num == null)return 0;int big = 1;int[] max = new int[num.length];int[] now = new int[num.length];  //非常重要,记录在自己前面的比自己小的最大值!Arrays.fill(max, 1);Arrays.fill(now, -1);for (int i = 1; i < num.length; i++) {int j = i - 1;while (j >= 0 && num[j] >= num[i]) {j = now[j];}now[i] = j;if (j >= 0) {max[i] = max[j] + 1;if (max[i] > big)big = max[i];}//System.out.println(i + " " + j);}return big;}}


以下是n^2的方法
package Array;  import java.util.Arrays;/**  * @Title: LongestIncrease.java  * @Package Array  * @Description: TODO * @author nutc * @date 2013-8-28 下午2:28:11  * @version V1.0  */public class LongestIncrease {public static void main(String args[]){int []  a = {1,-1,2,-3,4,-5,6,-7};System.out.println(find(a));}public static int find(int[] num){int longset [] = new int[num.length];Arrays.fill(longset, 1);    int max = 1;        for(int i=1;i<num.length;i++){        for(int j=i-1;j>=0;j--){    if(num[j]<num[i]){    num[i]+=num[j]+1;    if(num[i]>max)    max = num[i];    break;  //要记得break!  不然全部都要循环下了...    }    }    }    return max;}} 

原创粉丝点击