牛客 HJ24 合唱队

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客 HJ24 合唱队相关的知识,希望对你有一定的参考价值。


示例1

输入:
8
186 186 150 200 160 130 197 200
输出:
4

说明:
由于不允许改变队列元素的先后顺序,所以最终剩下的队列应该为186 200 160 130或150 200 160 130 

java 实现

package nowcoder.x2x;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
 * @date 2022/7/26 10:28
 */
public class HJ024 
    public static void main(String[] args) throws Exception 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int line1 = Integer.parseInt(br.readLine());
        String[] line2 = br.readLine().split(" ");

        int[] t = new int[line1];

        for (int i = 0; i < line1; i++) 
            t[i] = Integer.parseInt(line2[i]);
        

        //存储每个数左边小于其的数的个数,left[i]代表左侧的最长递增个数
        int[] left = new int[line1];
        //存储每个数右边小于其的数的个数,right[i]代表右侧的最长递减个数
        int[] right = new int[line1];

        //计算每个位置左侧的最长递增
        for (int i = 0; i < line1 - 1; i++) 
            left[i] = 1;
            for (int j = 0; j < i; j++) 
                // 说明t[j]满足与t[i]是递增关系
                if (t[i] > t[j]) 
                    // left[i]的转换方程,取Math.max(left[j] + 1, left[i])
                    left[i] = Math.max(left[j] + 1, left[i]);
                
            
        

        //计算每个位置右侧的最长递减
        for (int i = line1 - 1; i >= 0; i--) 
            right[i] = 1;
            for (int j = line1 - 1; j > i; j--) 
                // 说明t[j]满足与t[i]是递减关系
                if (t[i] > t[j]) 
                    // right[i]的转换方程,取Math.max(right[j] + 1, right[i])
                    right[i] = Math.max(right[j] + 1, right[i]);
                
            
        

        // 记录每个位置的值 满足数i的左边是从左向右递增,数i的右边是从左往右的递减
        int[] result = new int[line1];
        for (int i = 0; i < line1; i++) 
            //位置i计算了两次 所以需要-1
            result[i] = left[i] + right[i] - 1;
        

        //找到最大的满足要求的值,即需要调整的数量就最小
        int max = 1;
        for (int i = 0; i < line1; i++) 
            max = Math.max(result[i], max);
        
        System.out.println(line1 - max);
    

以上是关于牛客 HJ24 合唱队的主要内容,如果未能解决你的问题,请参考以下文章

HJ24_合唱队_动态规划_打印最少剔除人数_输出任意一列最长队列身高

牛客 HJ39 判断两个IP是否属于同一子网

牛客 HJ16 购物单

牛客刷题HJ5 进制转换

牛客 HJ32 密码截取

牛客刷题HJ4 字符串分隔