华为OD机试-运维日志排序
文章目录
- 题目描述
- 输入描述
- 输出描述:
- 示例
- Java 代码实现
题目描述
运维工程师采集到某产品线网运行一天产生的日志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个时间。
输出描述:
按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。
示例
输入:2
01:41:8.9
1:1:09.211
输出:1:1:09.211
01:41:8.9
输入:3
23:41:08.023
1:1:09.211
08:01:22.0
输出:1:1:09.211
08:01:22.0
23:41:08.023
输入:222:41:08.02322:41:08.23输出:22:41:08.02322:41:08.23
Java 代码实现
按照日志内容,分析并定义对应的日志内容类 LogBody 。
按照题目要求,对日志时间排序,这里写了两种写法,略有差异。
一种写法是,使用 TreeSet 和比较器进行排序,需要注意的是 Set本身是自带去重的,在定义比较器时,需要排除相等的情况。
另一种写法,是使用集合类本身的 sort 方法,以及比较器进行排序,因为这里使用的是 list ,不会去重,因此不做特殊处理。
package com.example;import lombok.Data;import java.util.*;/*** 华为OD机试-运维日志排序** @version v1.0* @author: fengjinsong* @date: 2023年02月25日 14时58分*/
public class LogSortDemo {static Scanner input = new Scanner(System.in);public static void main(String[] args) {// 使用比较器将日志体安装时间排序,针对于set而言,没有相等的情况(会自动去重)Comparator<LogBody> comparatorByLogTimeForSet = (o1, o2) ->(o1.millSeconds + o1.seconds * 1000 + o1.minutes * 60 * 1000 + o1.hours * 60 * 60 * 1000)- (o2.millSeconds + o2.seconds * 1000 + o2.minutes * 60 * 1000 + o2.hours * 60 * 60 * 1000) >= 0 ? 1 : -1;// 使用比较器将日志体安装时间排序,针对于list而言,有相等的情况,但是不会自动去重Comparator<LogBody> comparatorByLogTimeForList = Comparator.comparingInt(o -> (o.millSeconds + o.seconds * 1000 + o.minutes * 60 * 1000 + o.hours * 60 * 60 * 1000));TreeSet<LogBody> treeSet = new TreeSet<>(comparatorByLogTimeForSet);List<LogBody> logBodyList = new ArrayList<>();System.out.println("输入日志条数:");// 日志条数for (int logCount = input.nextInt(); logCount > 0; logCount--) {System.out.println("输入日志:");String log = input.next();// 将日志按照 小时:分钟:秒.毫秒 的格式进行切分String[] logSplit = log.split(":");LogBody logBody = new LogBody(logSplit[0], logSplit[1], logSplit[2], log);treeSet.add(logBody);logBodyList.add(logBody);}System.out.println("set排序");treeSet.forEach(log -> System.out.println(log.sourceLog));System.out.println("list排序");logBodyList.sort(comparatorByLogTimeForList);logBodyList.forEach(log -> System.out.println(log.sourceLog));}@Dataprivate static class LogBody {public LogBody(String hours, String minutes, String secondsAndMillSeconds, String sourceLog) {this.hours = Integer.parseInt(hours);this.minutes = Integer.parseInt(minutes);String[] secondsBody = secondsAndMillSeconds.split("\\.");this.seconds = Integer.parseInt(secondsBody[0]);this.millSeconds = Integer.parseInt(secondsBody[1]);this.sourceLog = sourceLog;}private int hours;private int minutes;private int seconds;private int millSeconds;private String sourceLog;}
}相关文章:
华为OD机试-运维日志排序
文章目录题目描述输入描述输出描述:示例Java 代码实现题目描述 运维工程师采集到某产品线网运行一天产生的日志n条,现需根据日志时间先后顺序对日志进行排序,日志时间格式为H:M:S.N。 H表示小时(0~23) M表示分钟(0~59) S表示秒(0~59) N表…...
1Kotlin基础知识
1 变量 1.1 用法 Kotlin中的变量定义有2个关键字,val和var val用来定义不可变变量,第一次赋值后就不能再被修改了, var定义可变变量, 随便修改。一个好的编程习惯是, 能用val的就不要用var, 原因是安全&a…...
Redis Lua脚本
文章目录一.引言二.eval简介三.lua数据类型和redis数据类型之间转换四.脚本的原子性五.错误处理六.纯函数脚本七.选择内部脚本一.引言 eval和evalsha命令使用内置的lua解释器,可以对lua脚本进行求值。 二.eval简介 第一个参数是一段脚本程序第二个参数是参数的个…...
web自动化测试-执行 JavaScript 脚本
JavaScript 是一种脚本语言,有的场景需要使用 js 脚本注入辅助我们完成 Selenium 无法做到的事情。 当 webdriver 遇到无法完成的操作时,可以使用 JavaScript 来完成,webdriver 提供了 execute_script() 方法来调用 js 代码。 执行 js 有两种…...
libevent笔记——简单介绍
背景 libevent libevent – an event notification library 官方定义:libevent是一个事件通知的库。更详细的介绍参考官方的就够了,这里我摘抄一下,并做一些注释 The libevent API provides a mechanism to execute a callback function whe…...
C++学习笔记-多态
多态的概念 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态 。 举个例子:比如 买票这个行为 ,当 普通人 买票时,是全价买票;…...
5632: 三角形
描述平面坐标系下,给定不共线的三个点组成一个三角形,问三角形最短的边长和最长的边长各为多少?输入输入包含3行,每行两个整数,表示一个点的坐标x和y。输出输出包括2个小数,分别为最短的边长和最长的边长。…...
Java基础--IO操作
一、IO原理及分类 一、IO原理 1、I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输,如读写文件,网络通信等。 2、java程序中对于数据的输入/输出操作一般都是以流的方式进行 3、java.io包下提供各…...
C++多线程
目录一、C线程库1. 认识thread类2. 线程函数的参数3. this_thread二、原子操作三、C互斥锁1. mutex2. lock_guard3. unique_lock四、C条件变量1. condition_variable2. 实现两个线程交替打印奇偶数一、C线程库 1. 认识thread类 在C11之前没有多线程的概念,涉及到的…...
【Arduino使用nRF24L01 】
【Arduino使用nRF24L01 】 1. 概述2. nRF24L01 收发器模块2.1工作原理2.2 NRF24L01模块变体2.3 nRF24L01 模块引脚排列3. 如何将 nRF24L01 连接到 Arduino3.1 原理接线图3.2 Arduino 和 nRF24L01 代码3.3 代码说明4. 故障排除5. 两个NRF24L01和Arduino进行双向无线通信5.1 nRF2…...
Appium自动化测试框架是一种较为优雅的使用方式
以操作小米商城下单为例流程是 启动小米商城app, 点击分类,点击小米手机, 点击小米10 至尊版,点击加入购物车,点击确定....原脚本Copyfrom time import sleep from appium import webdriver from selenium.common.exceptions impo…...
Linux c编程之应用交互协议分析与设计
在实际编程应用中,两个或多个功能服务(模块)之间 需要通过消息交互进行协作完成用户想要的逻辑功能,这里的消息交互指的是应用层的交互。最终数据传输(无论是TCP/IP还是其它)都是以二进制形式完成,但对于应用层协议来说有两种,一种是二进制协议,一种是文本协议。不管是…...
基于YOLOv5的细胞检测实战
数据及代码链接见文末 1.任务与数据集介绍 如下图所示,我们有一个医学细胞数据集,需要从数据集中检测出三种不同的细胞。标签中已经标注了细胞的类别和位置。 我们也可以看到,三种细胞有着不同的形态和颜色,同时数据集的标签也存在没有标注到的细胞 2.数据与标签配置方…...
【经典蓝牙】蓝牙AVRCP协议分析
协议简介 蓝牙AVRCP协议是蓝牙设备之间音视频的控制协议。定义了音频/视频的控制、浏览、查询、通知等一系列的命令集。常用来蓝牙耳机对手机的音乐进行控制,以及获取手机的音乐信息等场景。AVRCP协议有两个角色,分别是controller(CT&#x…...
gin 框架初始教程
一 、gin 入门1. 安装gin :下载并安装 gin包:$ go get -u github.com/gin-gonic/gin2. 将 gin 引入到代码中:import "github.com/gin-gonic/gin"3.初始化项目go mod init gin4.完整代码package mainimport "github.com/gin-go…...
对象分配策略
对象创建后,究竟何去何从,对象在堆中又会经历哪些过程,本篇就会详细解释对象创建后直到对象被回收的整个过程。之前博主已经写过Minor GC、Major GC、Full GC的区别,而本篇也主要根据这几个GC开展。 对象回收过程流程如下图所示: 正常的对象生存过程&a…...
你可能不知道的前端监控方案
前言 现有的大部分监控方案都是针对服务端的,而针对前端的监控很少,诸如线上页面的白屏时间是多少、静态资源的加载情况如何、接口请求耗时好久、什么时候挂掉了、为什么挂掉,这些都不清楚。 因而,我们需要一个前端的页面监控系…...
java spring AOP 完全注解开发
我们先创建一个项目 然后引入java spring aop的依赖 然后 在src下创建目录 我这里 直接就叫 Aop了 下面创建一个User类 参考代码如下 package Aop;import org.springframework.stereotype.Component;Component public class User {public void add(){System.out.println(&qu…...
ctf pwn基础-4
今天是学pwn的第四天,去接触了pwn的整数溢出。 目录 基础 实例讲解 实例讲解2 基础 关于整数溢出,这里以int为例,因为我php之前搞的比较多,以为这个int也是想php一样是64,最大值是9开头的那个,闹了不少笑…...
bool与引用类型
bool与引用类型bool类型介绍与使用bool(布尔类型)大小:1个字节返回值有两个:1(true),0(false)#include<iostream>using namespace std;int main() {bool a false;bool b true;cout << "a " << a << end…...
PvZ Toolkit 技术指南:从游戏修改到体验重塑
PvZ Toolkit 技术指南:从游戏修改到体验重塑 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 价值定位:为什么选择 PvZ Toolkit? 当你在《植物大战僵尸》无尽模式…...
GitLab vs Gitea 深度解析:如何选择适合你的代码托管方案?
1. 核心定位与适用场景对比 第一次接触代码托管平台时,我和很多开发者一样在GitLab和Gitea之间纠结。经过三年在不同规模团队的实际使用,我发现这两个工具就像瑞士军刀和美工刀的关系——没有绝对的好坏,关键看你要切什么。 GitLab更像是个&q…...
TOPSIS算法实战:用Python给河流水质排个名,附完整代码与避坑指南
TOPSIS算法实战:用Python给河流水质排个名,附完整代码与避坑指南 当环保部门拿到一份包含含氧量、PH值、细菌数、水草量等指标的河流水质数据时,如何科学评估各条河流的健康状况?传统的主观评分方法往往存在偏差,而TOP…...
PDF-Extract-Kit-1.0教育应用:教材习题自动识别与题库构建
PDF-Extract-Kit-1.0教育应用:教材习题自动识别与题库构建 1. 引言 老师们每天都要面对一大堆教材PDF,里面藏着无数宝贵的习题资源。但手动把这些题目一个个抄出来,整理成电子题库,简直是个噩梦——费时费力还容易出错。有没有什…...
这次终于选对了!2026年最值得体验的专业AI论文软件
2026年AI论文写作工具已从“内容生成”进化为融合学术规范与智能优化的全流程解决方案,核心评价维度涵盖文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规等关键指标。本次测评覆盖6款主流工具,涵盖中英文、全流程与专项功能、免费与付费版本&am…...
深大计算机考研复试全流程避坑指南:从机试环境、酒店选择到体检时机,这些细节别忽略
深大计算机考研复试全流程避坑指南:从机试环境到行程管理的实战策略 站在深大计算机楼前的那一刻,我才真正理解"细节决定成败"的含义——隔壁考场的同学因为酒店空调噪音彻夜未眠,机试时手指发抖敲错关键符号;而提前三个…...
延时补偿预测器
Active flux基于扰动观测器补偿仿真模型: (1)1.5周期延时补偿 (2)相电压补偿 (2)扰动观测器补偿最近在调试电机控制项目的时候,总遇到Active Flux观测器输出波形抖动的问题。工程师们…...
避坑指南:用STM32CubeMX配置SPI驱动MAX7219数码管的几个关键细节
STM32CubeMX实战:避开MAX7219数码管驱动的5个致命配置误区 第一次用STM32CubeMX配置SPI驱动MAX7219数码管时,我盯着屏幕上闪烁不定的数字差点崩溃——明明按照教程一步步操作,为什么显示总是错乱?后来才发现,那些看似简…...
AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案
AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trendi…...
如何使用开源音乐格式转换工具彻底解决NCM文件播放限制问题
如何使用开源音乐格式转换工具彻底解决NCM文件播放限制问题 【免费下载链接】ncmppGui 一个使用C编写的转换ncm文件的GUI工具 项目地址: https://gitcode.com/gh_mirrors/nc/ncmppGui 音乐格式转换是数字音乐管理中的常见需求,尤其是面对平台专有格式时。ncm…...
