华为OD机试 - 运维日志排序(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

运维工程师采集到某产品线网运行一天产生的日志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. 输入日志条数n;
  2. 接下来n行输入n个时间;
  3. 根据日志时间总毫秒数升序排序;
    • 计算日志时间总毫秒数;

五、Java算法源码

public static void main(String[] args) throws IOException {
    Scanner sc = new Scanner(System.in);
    // 日志条数
    int n = Integer.parseInt(sc.nextLine());
    List<String> list = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        list.add(sc.nextLine());
    }

    // 根据日志时间总毫秒数升序排序
    Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return (int) (calculate(o1) - calculate(o2));
        }
    });

    StringBuilder builder = new StringBuilder();
    for (String ip : list) {
        builder.append(ip).append("\n");
    }
    System.out.println(builder.deleteCharAt(builder.length() - 1));
}

// 计算日志时间总毫秒数
public static long calculate(String log) {
    String[] arr = log.split("[:.]");
    long hour = Long.parseLong(arr[0]) * 60 * 60 * 1000;
    long minutes = Long.parseLong(arr[1]) * 60 * 1000;
    long second = Long.parseLong(arr[2]) * 1000;
    long millisecond = Long.parseLong(arr[3]);
    return hour + minutes + second + millisecond;
}

六、效果展示

1、输入

4
10.08.066.1
10.9.55.6
10.09.55.6
010.8.66.4

2、输出

10.08.066.1
010.8.66.4
10.9.55.6
10.09.55.6

3、说明

华为OD机试 - 运维日志排序(Java 2023 B卷 100分)_第1张图片


下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,开发语言)