rambless
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int num = in.nextInt();
int[] arr = new int[num];
for (int i = 0; i < num; i++) {
arr[i] = in.nextInt();
}
//存放当前位置处左递减序列长度
int[] dp1 = new int[num];
//存放当前位置处右递增序列长度
int[] dp2 = new int[num];
Arrays.fill(dp1, 1);
Arrays.fill(dp2, 1);
//左序列初始化:当前索引i处存放0->i递增序列的最大长度:从左往右找
for (int i = 0; i < num; i++) {
for (int j = 0; j < i; j++) {
//如果j索引处比i索引处小
if (arr[i] > arr[j]) {
//动态转移方程
dp1[i] = Math.max(dp1[j] + 1, dp1[i]);
}
}
}
//右序列初始化:当前索引i处存放i->num-1递增序列的最大长度:从右往左找
for (int i = num - 1; i >= 0; i--) {
for (int j = num - 1; j > i; j--) {
//如果j索引处比i索引处小
if (arr[i] > arr[j]) {
//动态转移方程
dp2[i] = Math.max(dp2[j] + 1, dp2[i]);
}
}
}
//合并dp1,dp2
int[] result = new int[num];
for (int i = 0; i < num; i++) {
result[i] = dp1[i] + dp2[i];
}
//长度减最大值再加一即为答案
int max = 0;
for (int i = 0; i < num; i++) {
max = Math.max(max, result[i]);
}
System.out.println(num - max + 1);
}
}
}