算法原型---------最长递增子序列
ArrayList.get(i)的值代表 i + 1长度的递增子序列的最小末尾。
import java.util.ArrayList; public class Main { public static void main(String[] args) { int[] a = new int[5]; a[0] = 2; a[1] = 1; a[2] = 8; a[3] = 3; a[4] = 4; System.out.println(len(a)); } public static int len(int[] a) { ArrayList<Integer> b = new ArrayList<>(); b.add(a[0]); for (int i = 1; i < a.length; i++) { if (a[i] > b.get(b.size() - 1)) { b.add(a[i]); } else { int index = search(a[i], b); b.set(index, a[i]); } } return b.size(); } public static int search(int key, ArrayList<Integer> b) { int min = 0; int max = b.size(); int mid = 0; while (min <= max) { mid = (min + max) >> 1; if (key > b.get(mid)) { min = mid + 1; } else if (key < b.get(mid)) { max = mid - 1; } else { return mid; } } return min; } }