题解 | 合唱队

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

import java.util.Arrays;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[] arr = new int[num];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = in.nextInt();
        }
        int[] leftUp = new int[num];
        int[] rightUp = new int[num];
        for (int i = 0; i < num; i++) {
            leftUp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (arr[i] > arr[j]) {
                    leftUp[i] = Math.max(leftUp[i], leftUp[j] + 1);
                }
            }
        }
        for (int i = num - 1; i >= 0; i--) {
            rightUp[i] = 1;
            for (int j = num - 1; j > i; j--) {
                if (arr[i] > arr[j]) {
                    rightUp[i] = Math.max(rightUp[i], rightUp[j] + 1);
                }
            }
        }
        int length = 0;
        for (int i = 0; i < num; i++) {
            length = Math.max(length, leftUp[i] + rightUp[i] - 1);
        }
        System.out.println(num - length);
    }
}

#牛客春招刷题训练营# 这题我主要用到动态规划,也很容易理解,以合唱队的从小变大到从大变小的位置作为出发点,寻找最长递增序列和最长递减序列,两者相加减一,就是该位置形成合唱队队列的最长长度,然后暴力一下所有位置能够形成合唱队列的最长长度,然后用总长度减去该长度就是最终答案

全部评论

相关推荐

LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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