题解 | #合唱队#
合唱队
http://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int n = sc.nextInt();
int[] arr = new int[n];
int[] arrL = new int[n]; // 左侧小于arr[i]的个数
int[] arrR = new int[n]; // 右侧大于arr[i]的个数
for(int i = 0; i < n; ++i){
arr[i] = sc.nextInt();
}
for(int i = 0; i < n; ++i){
arrL[i] = 0; // 所以默认初始是0,,对于第一个数来说, 在arr[0]的左侧小于arr[0]的个数是0。
for(int j = 0; j < i; ++j){
if(arr[i] > arr[j]){
arrL[i] = Math.max(arrL[j] + 1, arrL[i]);
}
}
}
for(int i = n - 1; i >= 0; --i){
arrR[i] = 0; // 所以默认初始是0,,对于最后一个数来说, 在arr[n - 1]的右侧小于arr[0]的个数是0。
for(int j = n - 1; j > i; --j){
if(arr[i] > arr[j]){
arrR[i] = Math.max(arrR[j] + 1, arrR[i]);
}
}
}
int maxValue = 0;
for(int i = 0; i < n; ++i){
maxValue = Math.max(maxValue, arrR[i] + arrL[i] + 1);
}
System.out.println(n - maxValue);
}
}
} 
