输入的第一行是一个整数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; } }