输入的第一行是一个整数N(2 <= N <= 100),表示同学的总数。 第一行有n个整数,用空格分隔,第i个整数Ti(130 <= Ti <= 230)是第i位同学的身高(厘米)。
可能包括多组测试数据,对于每组数据, 输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
8 186 186 150 200 160 130 197 220
4
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int cnt = in.nextInt();
int[] height = new int[cnt];
for (int i = 0; i < cnt; i++) {
height[i] = in.nextInt();
}
System.out.println(processChorusFormation(height, cnt));
}
in.close();
}
private static int processChorusFormation(int[] height, int len) {
// TODO Auto-generated method stub
int res = 0;
int[] left = new int[len];
int[] right = new int[len];
left[0] = right[len - 1] = 1;
for (int i = 1; i < len; i++) {
left[i]=1;
for (int k =0; k<i; k++) {
if (height[i] > height[k]) {
left[i] = Math.max(left[i], left[k] + 1);
}
}
}
for (int i = len - 2; i >= 0; i--) {
right[i]=1;
for (int k = len - 1; k > i; k--) {
if (height[i] > height[k]) {
right[i] = Math.max(right[i], right[ k] + 1);
}
}
}
for (int i = 0; i < len; i++) {
if (left[i] + right[i] - 1 > res) {
res = left[i] + right[i] - 1;
}
}
return len-res;
}
}