题解 | 合唱队

合唱队

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);
        int num = in.nextInt();
        int[] height = new int[num];
        int[] left = new int[num];  //以i结尾的最长递增子序列
        Arrays.fill(left, 1);
        int[] right = new int[num];  //以i开头的最长递减子序列
        Arrays.fill(right, 1);
        for (int i = 0; i < num; i++) {
            height[i] = in.nextInt();
        }

        //找以i结尾最长递增子序列长度
        for(int i = 1; i < num; i++) {  //以i结尾
            for (int j = 0; j < i; j++) {  //以j开头i结尾的递增子序列
                if (height[i] > height[j]) {
                    left[i] = Math.max(left[i], left[j]+ 1);
                }
            }
        }
        //以i开头最长递减子序列长度
        for(int i = num - 2; i >= 0; i--) {  //从结尾开始,找以i结尾的递增
            for (int j = num - 1; j > i; j--) {
                if (height[i] > height[j]) {
                    right[i] = Math.max(right[i], right[j] + 1);
                }
            }
        }

        int index = 1;  //记录i
        int length = left[0] + right[0];
        for (int i = 1; i < num; i++) {
            length = Math.max(length, left[i] + right[i]);
        }
        System.out.print((num - length +1) >= 0 ? (num - length +1) : 0);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务