当前位置: 首页 > news >正文

华为OD机考题HJ24 合唱队

前言

应广大同学要求,开始以OD机考题作为练习题,看看算法和数据结构掌握情况。有需要练习的可以关注下。

描述

N 位同学站成一排,音乐老师要请最少的同学出列,使得剩下的 K 位同学排成合唱队形。

设𝐾K位同学从左到右依次编号为 1,2…,K ,他们的身高分别为𝑇1,𝑇2,…,𝑇𝐾T1​,T2​,…,TK​ ,若存在𝑖(1≤𝑖≤𝐾)i(1≤i≤K) 使得𝑇1<𝑇2<......<𝑇𝑖−1<𝑇𝑖T1​<T2​<......<Ti−1​<Ti​ 且 𝑇𝑖>𝑇𝑖+1>......>𝑇𝐾Ti​>Ti+1​>......>TK​,则称这𝐾K名同学排成了合唱队形。

通俗来说,能找到一个同学,他的两边的同学身高都依次严格降低的队形就是合唱队形。

例子:

123 124 125 123 121 是一个合唱队形

123 123 124 122不是合唱队形,因为前两名同学身高相等,不符合要求

123 122 121 122不是合唱队形,因为找不到一个同学,他的两侧同学身高递减。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

注意:不允许改变队列元素的先后顺序  不要求最高同学左右人数必须相等

数据范围: 1≤𝑛≤3000 1≤n≤3000 

输入描述:

用例两行数据,第一行是同学的总数 N ,第二行是 N 位同学的身高,以空格隔开

输出描述:

最少需要几位同学出列

输入:

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

实现原理

1.使用动态规划从左到右计算当前元素的左子序列最大长度。

2.使用动态规划从左到右计算当前元素的右子序列最大长度。

3.所有位置的左子序列和右子序列求和,比较最大的值。

实现代码

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息import java.util.Scanner;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[] dp_left=new int[n];for(int i=0;i<n;i++){dp_left[i]=1;for(int j=0;j<i;j++){if(arr[i]>arr[j]){dp_left[i]=Math.max(dp_left[i],dp_left[j]+1);}           }}//计算最长递减序列int[] dp_right=new int[n];for(int i=n-1;i>=0;i--){dp_right[i]=1;for(int j=n-1;j>i;j--){if(arr[i]>arr[j]){dp_right[i]=Math.max(dp_right[i],dp_right[j]+1);}}}int res=0;for(int i=0;i<n;i++){res=Math.max(res,dp_left[i]+dp_right[i]-1);}System.out.println(n-res);                 }}}

QA1:

http://www.lryc.cn/news/387711.html

相关文章:

  • 基于bootstrap的12种登录注册页面模板
  • 【劳德巴赫 Trace32 高阶系列 3.1 -- trace32 svf 文件操作与 InitState】
  • 爬虫知识:补环境相关知识
  • Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率
  • 【Python】探索 Pandas 中的 where 方法:条件筛选的利器
  • Pikachu靶场--Sql Inject
  • 【Python从入门到进阶】59、Pandas库中Series对象的操作(二)
  • 【PYG】使用datalist定义数据集,创建一个包含多个Data对象的列表并使用DataLoader来加载这些数据
  • 【设计模式】【创建型5-2】【工厂方法模式】
  • python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)
  • 【Postman学习】
  • 【Linux】IO多路复用——select,poll,epoll的概念和使用,三种模型的特点和优缺点,epoll的工作模式
  • IBCS 虚拟专线——让企业用于独立IP
  • 驾驭巨龙:Perl中大型文本文件的处理艺术
  • Kafka~特殊技术细节设计:分区机制、重平衡机制、Leader选举机制、高水位HW机制
  • springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password
  • 云计算 | 期末梳理(中)
  • pytest测试框架pytest-order插件自定义用例执行顺序
  • 吴恩达机器学习 第三课 week2 推荐算法(上)
  • MySQL CASE 表达式
  • Unity3D 游戏数据本地化存储与管理详解
  • 昇思25天学习打卡营第1天|初学教程
  • ctfshow-web入门-命令执行(web59-web65)
  • Websocket在Java中的实践——最小可行案例
  • python请求报错::requests.exceptions.ProxyError: HTTPSConnectionPool
  • 【Unity】Excel配置工具
  • 001 线性查找(lua)
  • 数据结构之链表
  • 【小工具】 Unity相机宽度适配
  • centos误删yum和python