免费企业信息查询网站,视频网站直播怎么做,wordpress archives页,seo推广编辑招聘最新华为OD机试
题目描述
[运维工程师]采集到某产品线网运行一天产生的日志n条#xff0c;现需根据日志时间先后顺序对日志进行排序#xff0c;日志时间格式为H:M:S.N。
H表示小时(0~23)M表示分钟(0~59)S表示秒(0~59)N表示毫秒(0~999)
时间可能并没有补全#xff0c;也就…最新华为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表示日志条数1n100000接下来n行输入n个时间。
输出描述
按时间升序排序之后的时间如果有两个时间表示的时间相同则保持输入顺序。
示例1
输入
2
01:41:8.9
1:1:09.211123
输出
1:1:09.211
01:41:8.912
说明 示例2
输入
3
23:41:08.023
1:1:09.211
08:01:22.01234
输出
1:1:09.211
08:01:22.0
23:41:08.023123
说明 示例3
输入
2
22:41:08.023
22:41:08.23123
输出
22:41:08.023
22:41:08.2312
说明 说明 两个时间表示的时间相同保持输入顺序 解题思路
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);ListString 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 ComparatorString() {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);}}
} 123456789101112131415161718192021222324252627282930313233343536
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(keylambda log: convertToMillisecond(log))for log in logs:print(log) 12345678910111213141516171819
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]);
} 1234567891011121314151617181920212223242526272829303132333435363738
C
#include iostream
#include vector
#include regex
#include algorithmusing 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() {vectorstring 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;
} 12345678910111213141516171819202122232425262728293031323334
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;
} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
完整用例
用例1
2
01:41:8.9
1:1:09.211123
用例2
3
23:41:08.023
1:1:09.211
08:01:22.01234
用例3
2
22:41:08.023
22:41:08.23123
用例4
5
10:00:00.001
11:00:00.002
12:00:00.003
13:00:00.004
14:00:00.005123456
用例5
4
12:30:00.001
15:45:00.002
09:00:00.003
18:20:00.00412345
用例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.0061234567
用例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.0071234567891011
用例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.00312345678
用例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.0001234567
用例10
4
12:00:00.000
00:00:00.001
23:59:59.999
06:30:45.12312345