java题目 HJ24 合唱队
2022/3/8 1:15:09
本文主要是介绍java题目 HJ24 合唱队,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述
计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:
N 位同学站成一排,音乐老师要请其中的 (N - K) 位同学出列,使得剩下的 K 位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为 1,2…,K ,他们的身高分别为 T1,T2,…,TK , 则他们的身高满足存在 i (1<=i<=K) 使得 T1<T2<......<Ti-1<Ti>Ti+1>......>TK 。
输入描述:
用例两行数据,第一行是同学的总数 N ,第二行是 N 位同学的身高,以空格隔开
输出描述:
最少需要几位同学出列
示例1
输入:8 186 186 150 200 160 130 197 200输出:
4说明:
由于不允许改变队列元素的先后顺序,所以最终剩下的队列应该为186 200 160 130或150 200 160 130
1 import java.io.*; 2 import java.util.*; 3 4 public class Main { 5 public static void main(String[] args) throws IOException { 6 Scanner sc = new Scanner(System.in); 7 while(sc.hasNext()) { 8 int ren = sc.nextInt(); 9 int[] shengao = new int[ren]; 10 for(int i =0; i<ren; i++) { 11 shengao[i] = sc.nextInt(); 12 } 13 14 int[] left = new int[ren]; 15 int[] righ = new int[ren]; 16 int[] result = new int[ren]; 17 18 //左侧递增 19 for(int i=0; i<ren; i++) { 20 left[i] =1; 21 for(int j =0; j<ren; j++) { 22 if(shengao[i] > shengao[j]) { 23 left[i] = Math.max(left[i], left[j] + 1); 24 } 25 } 26 } 27 28 //右侧递减 29 for(int i = ren -1; i>=0; i--) { 30 righ[i] =1; 31 for(int j =ren-1; j>=0; j--) { 32 if(shengao[i] > shengao[j]) { 33 righ[i] = Math.max(righ[i], righ[j] +1); 34 } 35 } 36 } 37 38 for(int i =0; i<ren; i++) { 39 result[i] = left[i] + righ[i] -1; 40 } 41 42 int max =1; 43 for(int i=0; i< ren; i++) { 44 max = Math.max(result[i], max); 45 } 46 47 System.out.println(ren - max); 48 } 49 } 50 }
这篇关于java题目 HJ24 合唱队的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能
- 2024-11-28如何高效管理数字化转型项目
- 2024-11-28SMART法则好用吗?有哪些项目管理工具辅助实现?
- 2024-11-28深度剖析:6 款办公软件如何构建设计团队项目可视化管理新生态?
- 2024-11-28HTTP缓存课程:新手入门指南
- 2024-11-28实战丨证券 HTAP 混合业务场景的难点问题应对