牛客网 华为机试 合唱队

news2024/11/17 10:42:52

在这里插入图片描述
本题抽象出来,我们需要找到最长递增子序列,还需要一个最长递减子序列,然后两个子序列的长度相加减去1就是我们这个合唱队的最大长度。然后我们用所有的人数减去合唱队最大长度,就是我们要求的最少需要几位同学出列。

这个题和上一题求最长递增子序列类似,只不过是又求了一个递减子序列,然后进行运算即可。

我们仍采用动态规划来解决。dp[i]表示包含nums[i]在内的最长递增子序列的长度。在本题中我们需要两个,以left和right区分。比如我们找到nums[i]此时left[i]+right[i]最大,就是表示以nums[i]为中心,其左右两侧满足递增递减并且整个序列长度最大。

先找到左侧的left最长递增子序列的长度。整个left[]应该初始化为1。因为最小递增子序列就是只包含其本身这个元素,所以是1。当nums[i]>nums[j]的时候(i>j),此时表示dp[i] = Math.max(dp[i],dp[j]+1)(dp就是left)。然后我们得到left数组。

同理,我们找递减的数组,right,如果我们从后往前遍历,就是在找递增的子序列,就和left的逻辑一致了。所以,我们从后往前遍历,并且right也都初始化为1。当nums[i]>numsj。此时满足递减的条件,所以right[i] = Math.max(right[i],right[j]+1)。

然后我们得到了right和left两个数组,此时我们要找到最大的合唱队长度,就是将right和left相加,找到结果最大的值(表示此时以nums[i]为中心,能够建立起最长的合唱队),但我们多加了一个i,因为right和left都包括了nums[i],所以我们要减去1才可以。

然后我们用整体的人数减去我们得到的最大值,就得到了我们要求的出列的最少人数。


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }

            int[] left = new int[n]; //存储每个数左边小于其的数的个数
            int[] right = new int[n];//存储每个数右边小于其的数的个数
            left[0] = 1;            //最左边的数设为1
            right[n - 1] = 1;        //最右边的数设为1
            //计算每个位置左侧的最长递增
            for (int i = 0; i < n; i++) {
                left[i] = 1;
                for (int j = 0; j < i; j++) {
                    if (arr[i] > arr[j]) {   //动态规划
                        left[i] = Math.max(left[j] + 1, left[i]);
                    }
                }
            }
            //计算每个位置右侧的最长递减
            for (int i = n - 1; i >= 0; i--) {
                right[i] = 1;
                for (int j = n - 1; j > i; j--) {
                    if (arr[i] > arr[j]) {   //动态规划
                        right[i] = Math.max(right[i], right[j] + 1);
                    }
                }
            }
            // 记录每个位置的值
            int[] result = new int[n];
            for (int i = 0; i < n; i++) {
                //位置 i计算了两次 所以需要-1
                result[i] = left[i] + right[i] - 1; //两个都包含本身
            }

            //找到最大的满足要求的值
            int max = 1;
            for (int i = 0; i < n; i++) {
                max = Math.max(result[i],max);
            }
            System.out.println(n - max);
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1501555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb - 3 - JavaScript(JS)

JavaScript(JS)官方参考文档&#xff1a;JavaScript 教程 JavaScript&#xff08;简称&#xff1a;JS&#xff09;是一门跨平台、面向对象的脚本语言&#xff0c;是用来控制网页行为的&#xff0c;它能使网页可交互&#xff08;脚本语言就不需要编译&#xff0c;直接通过浏览器…

Java数组常用操作

创建数组 int[] a {1,2,3};int[] a new int[]{1,2,3};int[] a new int[3];ArrayList<Integer> arr new ArrayList<>(); 添加元素 arr.add(99); //将99加入到数组末尾arr.add(3,99); //将99加入到指定索引3处访问元素 int c1 c[1]; int arr1 arr.get(1); …

基于PHP的汽车能耗优化系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 ThinkPHP框架 3 1.2 MySQL数据库 3 1.3 Vue框架 3 1.4 Bootstrap 3 1.5 Highcharts 3 1.6 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 6 2.3 非功能需求 8 2.4 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.…

C++的类与对象(二):this指针

目录 结构体内存对其规则 相关面试题 this指针 相关面试题 右箭头选择运算符-> C语言和C实现Stack的对比 结构体内存对其规则 1、第一个成员在与结构体偏移量为0的地址处 2、其它成员变量要对齐到某个数字&#xff08;对齐数&#xff09;的整数倍的地址处 对齐数 编…

Jumpserver 使用

目录 1、邮箱设置 2、用户管理 创建用户组 创建用户 3、资产管理 创建被管理机器的账号 添加资产 测试资产联通 推送账号 4、权限管理 资产授权 建命令过滤器 测试 使用 Xshell 登录 5、查看命令记录 查看回放 1、邮箱设置 修改当前站点的URL为本机IP或者jumps…

3.8题目练习

1.数的计算 题目其他部分&#xff1a; 这道题目可以先试着自己推一下找一下规律&#xff0c;题目给出的数字是一个小于等于一千的数字&#xff0c;这里我们不妨考虑一下从小往大推&#xff0c;我们从1开始&#xff0c;用f[i]来表示对应i共有几个合法的序列&#xff1a; 当n为1…

设计模式大题做题记录

设计模式大题 09年 上半年&#xff1a; 09年下半年 10年上半年 10年下半年 11年上半年 11年下半年 12年上半年 12年下半年 13年上半年 13年下半年

MindOpt优化器: 浅谈版本0.x和1.x之间API的差异

Mindopt 是一个优化求解器&#xff0c;如果它有两个主要版本——0.xx和1.x.x&#xff08;最新版本1.1.1&#xff09;&#xff0c;它们代表着软件开发的两个不同阶段。版本1.0.0表示软件的一个大的里程碑&#xff0c;代表着软件第一个正式的“成熟”发布版本&#xff0c;而0.25是…

用开发CesiumJS模拟飞机飞行应用(一,基本功能)

本部分向您展示如何构建您的第一个 Cesium 应用程序&#xff0c;以可视化模拟从旧金山到哥本哈根的真实航班&#xff0c;并使用 FlightRadar24收集的雷达数据。您将学习如何&#xff1a; 在网络上设置并部署您的 Cesium 应用程序。 添加全球 3D 建筑物、地形和图像的基础图层。…

高校水电预付费系统有什么作用?

Hey小伙伴们&#xff0c;今天来聊聊咱们大学里的一个超级实用的设施——水电预付费系统&#xff01;你是不是还在为每个月的水电账单烦恼呢&#xff1f;别担心&#xff0c;这个系统就是你的生活小帮手&#xff01; 首先&#xff0c;想象一下这 样的场景&#xff1a;开学初&…

Python通过SFTP实现网络设备配置备份

一、背景 为了防止网络设备意外损坏&#xff0c;导致配置文件无法恢复&#xff0c;可以通过将网络设备的配置文件备份到本地电脑上。 一般情况下&#xff0c;设备支持通过FTP、TFTP、FTPS、SFTP和SCP备份配置文件。其中使用FTP和TFTP备份配置文件比较简单&#xff0c;但是存在…

JAVA实现图像取模

JAVA对图像取模 就是图片变成点阵 原图 取模效果图 代码如下&#xff1a; public static void main(String[] args) throws IOException {try {// 读取图像文件BufferedImage image ImageIO.read(new File("C:/Users/xiaol/Desktop/img/0.jpg"));// 定义阈值&am…

模拟实现strlen函数

一、逐个计数法 #include<assert.h> #include<stdio.h>size_t my_strlen(const char* p) {int count 0;assert(p);//断言while (*p ! \0){p;count;}return count; }int main() {char str[] "hello world";size_t len my_strlen(str);printf("%d…

听 GPT 讲 client-go 源代码 (23)

分享更多精彩内容&#xff0c;欢迎关注&#xff01; File: client-go/kubernetes/scheme/register.go 在client-go项目中&#xff0c;client-go/kubernetes/scheme/register.go文件的作用是进行Kubernetes API对象的Scheme注册。 Scheme是一个用于序列化和反序列化Kubernetes A…

抖音视频评论采集工具|短视频批量下载软件

《抖音视频评论采集工具——解放双手的智能助手》 在数字化时代&#xff0c;抖音视频已成为人们获取信息、娱乐放松的重要来源之一。针对抖音视频评论的采集需求&#xff0c;我们推出了一款功能强大的软件&#xff0c;让您轻松实现评论批量提取&#xff0c;QQ:290615413提高工作…

stm32学习笔记:SPI通信协议原理(未完)

一、SPI简介(serial Peripheral Interface&#xff08;串行 外设 接口&#xff09;) 1、电路模式&#xff08;采用一主多从的模式&#xff09;、同步&#xff0c;全双工 1 所有SPI设备的SCK、MOSI、MISO分别连在一起 2 主机另外引出多条SS控制线&#xff0c;分别接到各从机的S…

二维码门楼牌管理系统应用场景:商业与零售业发展的助推器

文章目录 前言一、二维码门楼牌管理系统的基本功能二、商业和零售业中的应用场景三、二维码门楼牌管理系统的优势分析四、结论 前言 在数字化时代的浪潮中&#xff0c;二维码门楼牌管理系统凭借其独特的优势&#xff0c;正在逐步成为商业和零售业发展的新宠。它不仅能够为商家…

LLMs在BI中的运用

现有的BI分析存在以下一些问题&#xff1a; 原始数据入库规整要求比较高。业务过程产生的数据需要经过一些清洗等前置处理后才能够进行后续的BI分析使用。业务部门的数据分析过度依赖于技术部门。而业务与技术之间由于对分析需求理解上的差异&#xff0c;往往需要繁琐的沟通与…

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题&#xff0c;提出了一种特殊的RNN模型——长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTM&#xff09;&#xff0c;能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…

springboot244基于SpringBoot和VUE技术的智慧生活商城系统设计与实现

智慧生活商城系统的设计与实现 摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&…