算法:合唱队

news/2024/12/2 17:45:25/

描述

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

设K位同学从左到右依次编号为 1,2…,K ,他们的身高分别为T1​,T2​,…,TK​ ,若存在i(1≤i≤K) 使得T1​<T2​<......<Ti−1​<Ti​ 且 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 位同学的身高,以空格隔开

输出描述:

最少需要几位同学出列

示例1

输入:

8
186 186 150 200 160 130 197 200

输出:

4

说明:

由于不允许改变队列元素的先后顺序,所以最终剩下的队列应该为186 200 160 130或150 200 160 130           
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int count = 0;int[] array = null;// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextInt()) { // 注意 while 处理多个 caseint a = in.nextInt();count = a;array = new int[a];for (int i=0; i<a; i++) {int tmp = in.nextInt();array[i] = tmp;}}System.out.println(count-getRes(array));}public static int getRes(int[] array) {int len = array.length;// 存放当前位置左边所有递增队列最大的数量int[] left = new int[len];// 存放当前位置右边所有递减队列最大的数量int[] right = new int[len];for (int i=0; i<len; i++) {if (i>0) {for (int j=i-1; j>=0; j--) {if (array[i] > array[j]) {left[i] = Math.max(left[j]+1, left[i]);}}int r = len - 1 - i;for (int j=r+1; j<=len-1; j++) {if (array[r] > array[j]) {right[r] = Math.max(right[j]+1, right[r]);}}}     }int max = 0;for (int i=0; i<len; i++) {max = Math.max(right[i]+left[i]+1, max);}return max;}
}

 


http://www.ppmy.cn/news/60627.html

相关文章

AutoCAD介绍——带你了解最强的CAD软件

AutoCAD介绍——带你了解最强的CAD软件 什么是AutoCAD应用领域功能特点版本发展总结 什么是AutoCAD Autodesk的AutoCAD是一款世界著名的CAD软件&#xff0c;其全称为“Auto Computer-Aided Design”&#xff0c;是一种计算机辅助设计工具&#xff0c;用于帮助用户创建和编辑二…

【Python百日进阶-Web开发-Feffery】Day618- 趣味dash_18:微型系统--后端验证及md5加密

文章目录 一、环境准备1.1 初始化基础`Python + Dash`环境1.2 本项目中需要增加的第三方包二、本项目B站视频讲解三、页面效果四、项目源码4.1 server.py4.2 app.py4.3 login.py4.4 login_c.py4.5 user.py一、环境准备 1.1 初始化基础Python + Dash环境 CSDN文档参见:https:…

27. Service——Ingress

本章讲解知识点 Ingress 7层路由机制我们之前讲了 Service 的类型。除了 clusterIP 以外,另外三种方式都不推荐,因为这相当于将集群给暴露出去了,不安全,也不符合隔离的思想。 所以在 clusterIP 的基础上结合 Ingress 就可以做到安全将服务开放给外部。 这一节我们着重讲…

API接口的对接流程和注意事项

一、对接API数据接口的步骤通常包括以下几个部分&#xff1a; 了解API&#xff1a;首先需要详细了解API的基本信息、请求格式、返回数据格式、错误码等相关信息。可以查看API的官方文档或者使用API探索工具。同时&#xff0c;还需要明确数据请求的频率和使用权限等限制。 ​​测…

【前端面经】CSS-浮动和清除浮动的方式

浮动和清除浮动的方式 在页面布局中&#xff0c;我们经常会用到浮动来实现一些特殊效果&#xff0c;但是浮动也会引起一些问题。在使用浮动布局时&#xff0c;我们需要清除浮动以避免出现布局问题。本文将介绍浮动的相关知识以及清除浮动的方式。 浮动 浮动是 CSS 中的一种布…

python:评估分类模型性能的常用指标(acc、auc、roc)

本文记录了评估分类模型性能的常用指标ACC、AUC、ROC曲线的计算方法和代码。代码使用python实现。 简介 ACC(Accuracy)是模型的准确率,即模型正确预测的样本数占总样本数的比例。ACC 可以用来评估模型在整体上的分类效果,但它不能很好地反映模型在不同类别上的表现差异。…

云计算的优势与未来发展趋势

一、前言二、云计算的基础概念2.1 云计算的定义2.2 云计算的发展历程2.3 云计算的基本架构2.4 云计算的主要服务模式 三、企业采用云计算的优势3.1 降低成本3.2 提高效率和灵活性3.3 提升信息系统的安全性和可靠性3.4 拥有更加丰富的应用和服务 四、行业应用案例4.1 金融行业4.…

【硬件】嵌入式电子设计基础之分析电路

电子技术&#xff08;electronics&#xff09;是我们研究科技产品的基石&#xff0c;本文章通过一系列简单且使用的实例&#xff0c;带领大家走进电子技术的世界&#xff0c;并通过对这些实例的分析&#xff0c;掌握其中的知识点和实用的电路分析设计技能。 本篇文章围绕着模拟…