算法原型---------最长递增子序列
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;
}
}

浙公网安备 33010602011771号