找出由n个数组成的序列的最长单调递增子序列(O(n2)时间的算法)
public class LongestIncreasingIubsequence {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int max = 0, count = 1;
System.out.println("Please enter the sequence length:");
int n = input.nextInt();
int[] a = new int[n];
int b, c = 0;
System.out.println("Please enter a number sequence:");
for (int i = 0; i < a.length; i++) {
a[i] = input.nextInt();// 给数组赋值
}
// Successive连续子序列
for (int i = 0; i < n; i++) {
b = a[i];
for (int j = i + 1; j < n; j++) {
if (b < a[j]) {
b = a[j];
count++;
} else
break;
}
if (max < count) {
max = count;
c = i;
}
count = 1;
}
System.out.println("Successive Result(连续子序列):");
System.out.print(" ");
System.out.print(a[c] + " ");
b = a[c];
for (int i = c + 1; i < n; i++) {
if (b < a[i]) {
b = a[i];
System.out.print(b + " ");
} else
break;
}
System.out.println();
// Discontinuous非连续子序列
for (int i = 0; i < n; i++) {
b = a[i];
for (int j = i + 1; j < n; j++) {
if (b < a[j]) {
b = a[j];
count++;
}
}
if (max < count) {
max = count;
c = i;
}
count = 1;
}
System.out.println("Discontinuous Result(非连续子序列):");
System.out.print(" ");
System.out.print(a[c] + " ");
b = a[c];
for (int i = c + 1; i < n; i++) {
if (b < a[i]) {
b = a[i];
System.out.print(b + " ");
}
}
}
}
执行结果
Please enter the sequence length:
9
Please enter a number sequence:
2 5 6 -7 -8 3 4 5 6
Successive Result(连续子序列):
-8 3 4 5 6
Discontinuous Result(非连续子序列):
-8 3 4 5 6