经典动规,从左侧开始求最大长度,然后从右侧求最大长度。则i位置的最大长度就是左侧数组i位置的值+右侧位置的值-1。
代码如下:
package leetCode;
import java.util.Scanner;
public class TMp1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] height = new int[n];
for (int i = 0; i < n; i++) {
height[i] = scanner.nextInt();
}
int result = getResult(height);
System.out.println(result);
scanner.close();
}
public static int getResult(int height[]) {
int len = height.length;
int[] maxLenLeft = new int[len];
for (int i = 0 ; i < len ; i++)
maxLenLeft[i] = 1;
for (int i = 1; i < len; i++) {
for (int j = 0; j < i; j++) {
if (height[i] > height[j] && maxLenLeft[i] < maxLenLeft[j] + 1)
maxLenLeft[i] = maxLenLeft[j] + 1;
}
}
int[] maxLenRight = new int[len];
for (int i = 0 ; i < len ; i++)
maxLenRight[i] = 1;
for (int i = len - 2; i >= 0; i--) {
for (int j = len - 1; j > i; j--) {
if (height[i] > height[j]
&& maxLenRight[i] < maxLenRight[j] + 1)
maxLenRight[i] = maxLenRight[j] + 1;
}
}
int maxlen = 0;
for (int i = 0; i < len; i++) {
if (maxlen < maxLenLeft[i] + maxLenRight[i] - 1)
maxlen = maxLenLeft[i] + maxLenRight[i] - 1;
}
return len - maxlen;
}
}