数组的最长递增 子序列
来源:互联网 发布: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;}}