[关闭]
@yexiaoqi 2022-05-12T10:51:21.000000Z 字数 1064 阅读 483

日志时间排序

刷题 华为机试


题目:运维工程师采集到某产品线网运行一天产生的日志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
输入:
2
22:41:08.023
22:41:08.23
输出:
22:41:08.023
22:41:08.23
链接:https://www.nowcoder.com/discuss/942618

  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. while (sc.hasNext()) {
  7. int n = sc.nextInt();
  8. //存储转换后的毫秒数和对应的下标
  9. int[][] t = new int[n][2];
  10. //存储获取到的时间字符串
  11. String[] str = new String[n];
  12. for (int i = 0; i < n; i++) {
  13. str[i] = sc.next();
  14. String[] arr = str[i].split("[:.]");
  15. t[i][0] = Integer.parseInt(arr[0])*60*60*1000
  16. + Integer.parseInt(arr[1])*60*1000
  17. + Integer.parseInt(arr[2])*1000
  18. + Integer.parseInt(arr[3]);
  19. t[i][1] = i;
  20. }
  21. //对二维数组t 用第一列排序,o1-o2表示升序
  22. Arrays.sort(t, (o1, o2) -> o1[0]-o2[0]);
  23. for (int[] row : t) {
  24. //取每一行的第二个元素即索引,在输入字符串数组中找到对应字符串
  25. System.out.println(str[row[1]]);
  26. }
  27. }
  28. }
  29. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注