华为OD机考算法题:分班
题目部分
| 题目 | 分班 |
| 难度 | 易 |
| 题目说明 | 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用 Y 表示,不同班用 N 表示(第一位小朋友前面没人,用 N 表示)。 |
| 输入描述 | 输入为空格分开的小朋友编号和是否同班标志。 比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。 其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。 不考虑输入格式错误问题。 |
| 输出描述 | 输出为两行,每一行记录一个班小朋友的编号,编号用空格分开。且: 1、编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行。 2、若只有一个班的小朋友,第二行为空行。 3、若输入不符合要求,则直接输出字符串ERROR。 |
| 补充说明 | 无 |
| ------------------------------------------------------ | |
| 示例 | |
| 示例1 | |
| 输入 | 1/N 2/Y 3/N 4/Y |
| 输出 | 1 2 3 4 |
| 说明 | 2的同班标记为Y,因此和1同班。 3的同班标记为N,因此和1、2不同班。 4的同班标记为Y,因此和3同班。 所以1、2同班,3、4同班,输出为 1 2 3 4 |
解读与分析
题目解读:
输入为 1 行字符串,每条数据以空格分开。每条数据包含两部分:自己的编号 和 自己是否与前面的小朋友是否同班(使用 Y 表示同班,N 表示不同班。首位小朋友标记为 N)。
输出 2 行,每行输出一个班的小朋友编号,如果全都在一个班,第二行为空行;每行的数据按照编号从小到大输出;两行数据中,第一个编号最小的数据放在第一行。
分析与思路:
此题需要考虑输入错误的情况,所以此题包含步骤:验证输入,遍历输入数据进行分班,对分班数据排序,输出数据。具体如下:
1. 验证输入。
对输入字符串,以空位为分隔符进行分割,如果无法分割出数据,则输出 ERROR。
逐个遍历分隔后的每条数据,对每条数据,继续以 "/" 进行分割,如果无法分割出数据,则输出 ERROR。对于分割后的数据,如果 "/" 之前的数据不是数字,则输出 ERROR;如果 "/" 之后的数据不是 "Y" 或 "N",则输出 "N"。首条数据的 "/" 之后为 "N"。
2. 遍历输入数据进行分班。
新建 2 个数组,把第一条数据编号放到第一个数组中,如果第二条数据的 "/" 之后是 "Y",则放到与前一条数据相同的数组,否则放到第二个数组。
逐条遍历数据,对于每条数据,如果 "/" 是 "Y",则把这条数据的编号放到与前面一条数据相同的数组中,否则放到另外一条数组中。
3. 对分班数据排序。
对数组中的数据从小到大排序。
4. 输出数据。
如果其中一个数组为空,则输出其中一个数组,另外一个空行。
如果两个数组均不为空,则判断两个数组的第一个元素大小,先输出第一个元素较小的数组。
因涉及到排序,时间复杂度为 O(nlogn),空间复杂度为 O(n)。
代码实现
Java代码
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;/*** 篮球比赛* * @since 2023.09.15* @version 0.1* @author Frank**/
public class ClassCheck {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();processClassCheck(input);}}private static void processClassCheck(String input) {String[] kidsInfoStr = input.split(" ");if (kidsInfoStr == null || kidsInfoStr.length == 0) {System.out.println("ERROR");return;}List<Integer>[] classInfo = new ArrayList[2];classInfo[0] = new ArrayList<Integer>();classInfo[1] = new ArrayList<Integer>();int curClass = 1;for (int i = 0; i < kidsInfoStr.length; i++) {String eachRecord = kidsInfoStr[i];String[] recordDetail = eachRecord.split("/");if (recordDetail == null || recordDetail.length != 2) {System.out.println("ERROR");return;}int num;try {num = Integer.parseInt(recordDetail[0]);} catch (NumberFormatException e) {System.out.println("ERROR");return;}if ("Y".equals(recordDetail[1])) {classInfo[curClass].add(num);} else if ("N".equals(recordDetail[1])) {curClass ^= 1;classInfo[curClass].add(num);} else {System.out.println("ERROR");return;}}Collections.sort(classInfo[0]);Collections.sort(classInfo[1]);if (classInfo[1].size() > 0 && classInfo[1].get(0) < classInfo[0].get(0)) {List tmp = classInfo[0];classInfo[0] = classInfo[1];classInfo[1] = tmp;}for (int i = 0; i < classInfo.length; i++) {if (classInfo[i].size() == 0) {// 如果为 0,一定是第二个System.out.println();break;}for (int j = 0; j < classInfo[i].size(); j++) {System.out.print(classInfo[i].get(j));if (j != classInfo[i].size() - 1) {System.out.print(" ");} else {System.out.println();}}}}}
JavaScript代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {processClassCheck(line);}
}();function processClassCheck(input) {var kidsInfoStr = input.split(" ");if (kidsInfoStr == null || kidsInfoStr.length == 0) {console.log("ERROR");return;}var classInfo = new Array(2);classInfo[0] = new Array();classInfo[1] = new Array();var curClass = 1;for (var i = 0; i < kidsInfoStr.length; i++) {var eachRecord = kidsInfoStr[i];var recordDetail = eachRecord.split("/");if (recordDetail == null || recordDetail.length != 2) {console.log("ERROR");return;}if (isNaN(recordDetail[0]) ) {console.log("ERROR");return;}var num = parseInt(recordDetail[0]);if ("Y" == recordDetail[1]) {classInfo[curClass].push(num);} else if ("N" == recordDetail[1]) {curClass ^= 1;classInfo[curClass].push(num);} else {console.log("ERROR");return;}}var sortFun = function(a,b){return a - b;}classInfo[0].sort( sortFun );classInfo[1].sort( sortFun );if (classInfo[1].length > 0 && classInfo[1][0] < classInfo[0][0]) {var tmp = classInfo[0];classInfo[0] = classInfo[1];classInfo[1] = tmp;}for (var i = 0; i < classInfo.length; i++) {if (classInfo[i].length == 0) {// 如果为 0,一定是第二个console.log("");break;}var output = "";for (var j = 0; j < classInfo[i].length; j++) {output += classInfo[i][j] ;if (j != classInfo[i].length - 1) {output += " ";}}console.log( output );}
}
(完)
相关文章:
华为OD机考算法题:分班
题目部分 题目分班难度易题目说明幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用 Y 表示,不同班用 N 表示…...
【gcc】RtpTransportControllerSend学习笔记 3:gcc
本文是大神 https://www.cnblogs.com/ishen 的文章的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。本文使用的代码是m79 ,与大神有不同。2.4 Probe只会在一些特殊的时候才会进行探测(链路刚开始时, 码率不正常暴跌时)2.5 : 对发送的吞吐量…...
CSP-J第二轮试题-2019年-3题
文章目录 参考:总结 [CSP-J2019] 纪念品题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示答案 现场真题注意事项 参考: P5662 CSP-J2019纪念品 总结 本系列为CSP-J/S算法竞赛真题讲解,会按照年…...
数据库:Hive转Presto(三)
继续上节代码。 import re import os import tkinter.filedialog from tkinter import *class Hive2Presto:def __int__(self):self.t_funcs [substr, nvl, substring, unix_timestamp] \[to_date, concat, sum, avg, abs, year, month, ceiling, floor]self.time_funcs [d…...
【AI视野·今日Robot 机器人论文速览 第四十八期】Thu, 5 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Thu, 5 Oct 2023 Totally 32 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers LanguageMPC: Large Language Models as Decision Makers for Autonomous Driving Authors Hao Sha, Yao Mu, Yuxuan Jiang, Li…...
学信息系统项目管理师第4版系列20_风险管理
1. 针对不确定性的应对方法 1.1. 【高23上选58】 1.2. 收集信息 1.2.1. 可以对信息收集和分析工作进行规划,以便发现更多信息(如进行研究、争取专家参与或进行市场分析)来减少不确定性 1.3. 为多种结果做好准备 1.3.1. 制定可用的解决方…...
卷积神经网络的发展历史-VGG
VGG的产生 2014 年,Simonyan和Zisserman提出了VGG系列模型(包括VGG-11/VGG-13/VGG-16/VGG-19),并在当年的ImageNet Challenge上作为分类任务第二名、定位(Localization)任务第一名的基础网络出现。 VGG的…...
qt解决信号和槽连接时传递额外参数的问题
解决信号和槽连接时传递额外参数的问题 QSignalMapper 是 Qt 框架中的一个类,用于解决信号和槽连接时传递额外参数的问题。当一个信号被触发时,QSignalMapper 可以将该信号与一个特定的参数关联起来,并将信号与对应的槽函数进行连接。 下面…...
『力扣每日一题14』:消失的数字
昨天忙过头,等想起来已经 12 点多了,于是乎断更了。在这里先跟广大读者说声抱歉,并且稍后我会再更一篇。 一、题目 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&…...
【b站韩顺平 快速学Java课】Java的JDK8(包括公共JRE8)安装教程 总结
最近开始学Java,如果是程序员的话要使用Java——需要安装JDK。 不同操作系统(Win/Linux/Mac)——需要安装不同的JDK。 1.JDK安装官网链接: Java Downloads | Oracle 我的电脑是win x64,以下笔记总结就暂且以本人电脑操作系统版本…...
Spark 弹性分布式数据集 RDD
1.RDD简介 `RDD` 全称为 Resilient Distributed Datasets,是 Spark 最基本的数据抽象,它是只读的、分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD 转换而来,它具有以下特性: 一个 RDD 由一个或者多个分区(Partitions)组成。对于 RDD 来说,每个分区会被一个…...
电脑被删除的文件怎么恢复?2023年数据恢复方法分享
大多数人在使用电脑时都可能会遇到误删文件的情况。一不小心,重要的文件或数据就消失了,情急之下,大多会感到慌乱和无助。但其实,文件误删除并非不可挽回的灾难。本文将为大家介绍几种有效的文件恢复方法,以帮助大家在…...
李宏毅 2022机器学习 HW3 boss baseline 上分记录
作业数据是所有数据都有标签的版本。 李宏毅 2022机器学习 HW3 boss baseline 上分记录 1. 训练数据增强2. cross validation&ensemble3. test dataset augmentation4. resnet 1. 训练数据增强 结论:训练数据增强、更长时间的训练、dropout都证明很有效果&…...
SpringBatch适配不同数据库的两种方法
一、配置JobRepository Configuration EnableBatchProcessing public class TaskArrangeConfig extends DefaultBatchConfigurer {Autowiredprivate DataSource dataSource;Autowiredprivate JobLauncher jobLauncher;Autowiredprivate JobExplorer jobExplorer;Autowiredpriv…...
【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】
文章目录 1.1 什么是 CI-700?1.1.1 关于 CI-7001.1.2 CI-700 特点1.2 全局配置参数1.2.1 寻址能力1.3 组件和配置1.3.1 CI-700 互联的结构1.3.2 Crosspoint(XP)1.3.3 外部接口1.4 组件(Components)1.1 什么是 CI-700? CI-700是一种AMBA 5 CHI互连,具有可定制的网状拓扑结构…...
找不到msvcp140_1.dll怎么办,快速解决msvcp140_1.dll问题的方法分享
在日常使用计算机的过程中,经常会遇到一些程序无法正常运行的问题,其中最常见的就是“msvcp140_1.dll丢失”。这是一个典型的DLL文件丢失问题,但背后的原因却往往并不简单。通过深入研究这个问题,我对其有了更深入的理解。 首先&a…...
华为云云耀云服务器L实例评测|部署私有网盘 Nextcloud
华为云云耀云服务器L实例评测|部署私有网盘 Nextcloud 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Nextcloud3.1 Nextcloud 介绍3.2 Docker 环境搭建3.3 Nex…...
vue3中使用插件vite-plugin-svg-icons
在vue3 vite 项目中使用svg图标 插件:vite-plugin-svg-icons 预加载 在项目运行时就生成所有图标,只需操作一次 dom高性能 内置缓存,仅当文件被修改时才会重新生成 安装 yarn add vite-plugin-svg-icons -D # or npm i vite-plugin-svg-icons -D # or pnpm inst…...
面试题20231008
前端 2023年前端面试题汇总-CSDN博客 后端 1.Java基础 容器、线程等等 a.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Envir…...
2023全新小红书图集和视频解析去水印网站源码
2023全新小红书图集和视频解析去水印网站源码 小红书视频图集解析网站源码,在红书看到好看的图片以及好看的头像,但是直接下载又有水印就非常难受,这个可以一键解析去除水印,支持统计解析次数,本地接口。 源码下载&a…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
