华为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个时间。
按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。
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;
}
4
10.08.066.1
10.9.55.6
10.09.55.6
010.8.66.4
10.08.066.1
010.8.66.4
10.9.55.6
10.09.55.6
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。