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

【华为OD机试真题29.9¥】(E卷,100分) - 运维日志排序(Java Python JS C++ C )

最新华为OD机试

题目描述

[运维工程师]采集到某产品线网运行一天产生的日志n条,现需根据日志时间先后顺序对日志进行排序,日志时间格式为H:M:S.N。

  • H表示小时(0~23)
  • M表示分钟(0~59)
  • S表示秒(0~59)
  • N表示毫秒(0~999)

时间可能并没有补全,也就是说,01:01:01.001也可能表示为1:1:1.1。

输入描述

第一行输入一个整数n表示日志条数,1<=n<=100000,接下来n行输入n个时间。

输出描述

按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。

示例1

输入

2
01:41:8.9
1:1:09.211
  • 1
  • 2
  • 3

输出

1:1:09.211
01:41:8.9
  • 1
  • 2

说明

示例2

输入

3
23:41:08.023
1:1:09.211
08:01:22.0
  • 1
  • 2
  • 3
  • 4

输出

1:1:09.211
08:01:22.0
23:41:08.023
  • 1
  • 2
  • 3

说明

示例3

输入

2
22:41:08.023
22:41:08.23
  • 1
  • 2
  • 3

输出

22:41:08.023
22:41:08.23
  • 1
  • 2

说明

说明 两个时间表示的时间相同,保持输入顺序

解题思路

Java

import java.util.*;
import java.util.regex.*;public class Main {/* 将时间字符串转换为毫秒数 */
public static int convertToMillisecond(String timeStr) {Pattern pattern = Pattern.compile("(\\d+):(\\d+):(\\d+).(\\d+)");Matcher matcher = pattern.matcher(timeStr);return matcher.find() ? ((Integer.parseInt(matcher.group(1)) * 60 + Integer.parseInt(matcher.group(2))) * 60 + Integer.parseInt(matcher.group(3))) * 1000 + Integer.parseInt(matcher.group(4)) : 0;
}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<String> logs = new ArrayList<>();int n = scanner.nextInt();scanner.nextLine(); // 忽略换行符for (int i = 0; i < n; i++) {String log = scanner.nextLine();logs.add(log);}/* 日志排序 */Collections.sort(logs, new Comparator<String>() {public int compare(String log1, String log2) {int time1 = convertToMillisecond(log1);int time2 = convertToMillisecond(log2);return time1 - time2;}});for (String log : logs) {System.out.println(log);}}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

Python

import redef convertToMillisecond(timeStr):hour, minute, second, millisecond = map(int, re.findall(r'\d+', timeStr))return hour * 60 * 60 * 1000 + minute * 60 * 1000 + second * 1000 + millisecond
logs = []
n = int(input())for i in range(n):log = input()logs.append(log)# 日志排序
logs.sort(key=lambda log: convertToMillisecond(log))for log in logs:print(log)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

JavaScript

const readline = require('readline');
const rl = readline.createInterface({input: process.stdin,output: process.stdout
});const logs = [];
let n;rl.on('line', (input) => {if (!n) {n = parseInt(input);} else {logs.push(input);}if (logs.length === n) {/* 日志排序 */logs.sort((log1, log2) => {const time1 = convertToMillisecond(log1);const time2 = convertToMillisecond(log2);return time1 < time2 ? -1 : 1;});for (const log of logs) {console.log(log);}rl.close();}
});function convertToMillisecond(timeStr) {const match = timeStr.match(/(\d+):(\d+):(\d+).(\d+)/);return (parseInt(match[1]) * 3600000) + (parseInt(match[2]) * 60000) + (parseInt(match[3]) * 1000) + parseInt(match[4]);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

C++

#include <iostream>
#include <vector>
#include <regex>
#include <algorithm>using namespace std;int convertToMillisecond(string timeStr) {regex pattern("(\\d+):(\\d+):(\\d+).(\\d+)");smatch matcher;return regex_search(timeStr, matcher, pattern) ? ((stoi(matcher[1]) * 60 + stoi(matcher[2])) * 60 + stoi(matcher[3])) * 1000 + stoi(matcher[4]) : 0;
}
int main() {vector<string> logs;int n;cin >> n;cin.ignore(); // 忽略换行符for (int i = 0; i < n; i++) {string log;getline(cin, log);logs.push_back(log);}/* 日志排序 */sort(logs.begin(), logs.end(), [](const string& log1, const string& log2) {int time1 = convertToMillisecond(log1);int time2 = convertToMillisecond(log2);return time1 < time2;});for (const string& log : logs) {cout << log << endl;}return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

C语言

#include <stdio.h>
#include <stdlib.h>
#include <string.h>/* 将时间字符串转换为毫秒数 */
int convertToMillisecond(const char *timeStr) {int hours = 0, minutes = 0, seconds = 0, milliseconds = 0;sscanf(timeStr, "%d:%d:%d.%d", &hours, &minutes, &seconds, &milliseconds);return ((hours * 60 + minutes) * 60 + seconds) * 1000 + milliseconds;
}/* 比较函数,用于qsort */
int compare(const void *a, const void *b) {const char **log1 = (const char **)a;const char **log2 = (const char **)b;int time1 = convertToMillisecond(*log1);int time2 = convertToMillisecond(*log2);return time1 - time2;
}int main() {int n;scanf("%d", &n);getchar(); // 忽略换行符char **logs = (char **)malloc(n * sizeof(char *));for (int i = 0; i < n; i++) {logs[i] = (char *)malloc(50 * sizeof(char)); // 假设每个时间字符串长度不超过50fgets(logs[i], 50, stdin);// 去除fgets输入中的换行符logs[i][strcspn(logs[i], "\n")] = '\0';}/* 对日志进行排序 */qsort(logs, n, sizeof(char *), compare);/* 输出排序后的日志 */for (int i = 0; i < n; i++) {printf("%s\n", logs[i]);free(logs[i]); // 释放每个日志字符串的内存}free(logs); // 释放日志指针数组的内存return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
完整用例
用例1
2
01:41:8.9
1:1:09.211
  • 1
  • 2
  • 3
用例2
3
23:41:08.023
1:1:09.211
08:01:22.0
  • 1
  • 2
  • 3
  • 4
用例3
2
22:41:08.023
22:41:08.23
  • 1
  • 2
  • 3
用例4
5
10:00:00.001
11:00:00.002
12:00:00.003
13:00:00.004
14:00:00.005
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
用例5
4
12:30:00.001
15:45:00.002
09:00:00.003
18:20:00.004
  • 1
  • 2
  • 3
  • 4
  • 5
用例6
6
01:01:01.001
02:02:02.002
03:03:03.003
04:04:04.004
05:05:05.005
06:06:06.006
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
用例7
10
23:59:59.999
00:00:00.001
12:00:00.000
01:01:01.001
02:02:02.002
03:03:03.003
04:04:04.004
05:05:05.005
06:06:06.006
07:07:07.007
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
用例8
7
12:30:00.001
15:45:00.002
09:00:00.003
18:20:00.004
01:01:01.001
02:02:02.002
03:03:03.003
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
用例9
6
1:1:09.211
01:41:8.9
08:01:22.0
23:41:08.023
00:00:00.001
12:00:00.000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
用例10
4
12:00:00.000
00:00:00.001
23:59:59.999
06:30:45.123
  • 1
  • 2
  • 3
  • 4
  • 5

相关文章:

【华为OD机试真题29.9¥】(E卷,100分) - 运维日志排序(Java Python JS C++ C )

最新华为OD机试 题目描述 [运维工程师]采集到某产品线网运行一天产生的日志n条&#xff0c;现需根据日志时间先后顺序对日志进行排序&#xff0c;日志时间格式为H:M:S.N。 H表示小时(0~23)M表示分钟(0~59)S表示秒(0~59)N表示毫秒(0~999) 时间可能并没有补全&#xff0c;也就…...

rust编程实战:实现3d粒子渲染wasm

源码 纯js实现 fps&#xff1a; wasm实现 通过对比可以看出来 wasm 实现的计算比纯js刷新相对稳定。...

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome&#xff01;它不仅让你随时随地畅享本地音乐…...

Unity自定义区域UI滑动事件

自定义区域UI滑动事件 介绍制作1.创建一个Image2.创建脚本 总结 介绍 一提到滑动事件联想到有太多的插件了比如EastTouchBundle&#xff0c;今天想单纯通过UI去做一个滑动事件而不是基于Box2d或者Box去做滑动事件。 制作 1.创建一个Image 2.创建脚本 using UnityEngine; us…...

Redis7——进阶篇(五)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09;Redis&#xff08;三&#xff09;Redis&#x…...

时序和延时

1、延迟模型的类型 verilog有三种类型的延迟模型&#xff1a;分布延迟 、 集总延迟 、 路径延迟&#xff08;pin to pin&#xff09; 1.1、 分布延迟 分布延迟是在每个独立元件的基础上进行定义的。 module M(output wire out ,input wire a …...

高效自动化测试:打造Python+Requests+Pytest+Allure+YAML的接口测试框架

一、背景 在快节奏的开发周期中&#xff0c;如何确保接口质量&#xff1f;自动化测试是关键。通过构建标准化、可复用的测试框架&#xff0c;能显著提升测试效率与准确性&#xff0c;为项目质量保驾护航[1][7]。 二、目标 ✅ 核心目标&#xff1a; ● 实现快速、高效的接口测试…...

[微服务设计]1_微服务

摘要&#xff1a;微服务设计应当是面向服务、适配团队、循序渐进的设计。 目录 开篇引言 微服务 什么样的服务是健康的服务 什么是微服务 面向服务的架构 微服务较传统单体架构多的行为 微服务行为带来的问题 微服务解决的问题 开篇引言 在之前的工作中&#xff0c;有…...

Webservice创建

Webservice创建 服务端创建 3层架构 service注解&#xff08;commom模块&#xff09; serviceimpl&#xff08;server&#xff09; 服务端拦截器的编写 客户端拦截器 客户端调用服务端&#xff08;CXF代理&#xff09; 客户端调用服务端&#xff08;动态模式调用&a…...

Unity安卓Android从StreamingAssets加载AssetBundle

在安卓下无法获取StreamingAssets目录下所有目录和文件名&#xff0c;所以需要提前将文件名整理成一个文件filelist.txt。 1.用批处理命令将StreamingAssets下所有文件名输出到filelist.txt中 chcp 65001是使用UTF-8编码&#xff0c;否则中文是乱码。 echo off chcp 65001 d…...

【MySQL_06】表的相关操作

文章目录 一、表的基本操作1.1 创建表1.2 修改表结构1.2.1 添加列1.2.2 删除列1.2.3 修改列1.2.4 重命名列1.2.5 添加约束 1.3 删除表1.4 查询表结构1.5 重命名表1.6 复制表1.6.1 仅复制结构1.6.2 复制结构及数据 1.7 清空表数据 二、数据完整性约束2.1 主键约束2.2 唯一约束2.…...

如何选择开源向量数据库

文章目录 评估维度查询性能索引与存储扩展性数据管理能力生态支持 常见向量数据库对比 评估维度 选择开源向量数据库时&#xff0c;需要综合考虑查询性能、数据规模、索引构建速度、生态支持等多个因素&#xff0c;以下是关键的评估维度&#xff1a;选择开源向量数据库时&…...

c#面试题整理4

1.stirng str"",string strnull&#xff0c;俩者有何区别 空字符串占有存储控件&#xff0c;null不占用 2.class与struct的异同 异同class 可继承 引用类型 1.都可以定义方法字段 2.都可实例化&#xff0c;与类的使用几乎一样 struct 不可继承 值类型 只能声明带…...

智能焊机监测系统:打造工业安全的数字化盾牌

在现代工业生产中&#xff0c;焊机作为核心设备之一&#xff0c;其稳定性和安全性直接关系到生产效率和产品质量。德州迪格特科技有限公司推出的智能焊机监测系统&#xff0c;通过先进的技术手段&#xff0c;为工业生产构筑了一道坚固的安全防线。 智能监测&#xff0c;保障焊…...

Centos的ElasticSearch安装教程

由于我们是用于校园学习&#xff0c;所以最好是关闭防火墙 systemctl stop firewalld systemctl disable firewalld 个人喜欢安装在opt临时目录&#xff0c;大家可以随意 在opt目录下创建一个es-standonely-docker目录 mkdir es-standonely-docker 进入目录编辑yml文件 se…...

一二三应用开发平台——能力扩展:多数据源支持

背景 随着项目规模的扩大&#xff0c;单一数据源已无法满足复杂业务需求&#xff0c;多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件&#xff1a;开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…...

pandas-基础(数据结构及文件访问)

1 Pandas的数据结构 1.1 Series 特点&#xff1a;一维的数据型对象&#xff0c;包含一个值序列和数据标签(即索引&#xff09; 创建Series&#xff1a; pandas.Series(dataNone, indexNone, dtypeNone, nameNone, copyFalse, fastpathFalse) 参数说明&#xff1a; data&a…...

数据分析与AI丨AI Fabric:数据和人工智能架构的未来

AI Fabric 架构是模块化、可扩展且面向未来的&#xff0c;是现代商业环境中企业实现卓越的关键。 在当今商业环境中&#xff0c;数据分析和人工智能领域发展可谓日新月异。几乎每天都有新兴技术诞生&#xff0c;新的应用场景不断涌现&#xff0c;前沿探索持续拓展。可遗憾的是&…...

如何根据应用需求选择光谱相机

一、按核心参数匹配需求 ‌光谱范围‌ ‌农业监测‌&#xff1a;需覆盖可见光至近红外&#xff08;400-1000nm&#xff09;&#xff0c;以捕捉作物叶绿素、水分等特征‌。 ‌地质勘探‌&#xff1a;需宽光谱&#xff08;350-2500nm&#xff09;及高分辨率&#xff08;3-10nm…...

内存泄漏出现的时机和原因,如何避免?

由于时间比较紧张我就不排版了&#xff0c;但是对于每一种可能的情况都会出对应的代码示例以及解决方案代码示例。 内存泄漏可能的原因之一在于用户在动态分配一个内存空间之中&#xff0c;忘记将这部分内容手动释放。例如&#xff1a;&#xff08;c之中使用new分配内存没有使…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...