栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

华为OD机试题:运维日志排序

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

华为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表示日志条数,1<=n<=100000,接下来n行输入n个时间。



输出描述:

按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。



示例:

1.输入:

2
01:41:8.9
1:1:09.211
输出:

1:1:09.211
01:41:8.9
2.输入:

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
3.输入:

2

22:41:08.023

22:41:08.23

输出:

22:41:08.023

22:41:08.23

#解题想法:将整个时间表达式,都换算到毫秒为单位,考虑到有可能存在同样的时间str,
由于字典key不能重复,所以对key先pop,再附加表达式,重新添加键值对,
对values排序后,输出结果,对重复的key单独处理下



    while 1:
        try:
            l=["1:1:1.10","1:1:0.1010","1:1:2.0","1:1:1.10","08:01:22.0"]
            d={}

            for i in range(0,len(l)):
                tmp=l[i].split(".")
                sum=int(tmp[1])
                tmp2=tmp[0].split(":")

                for j in range(len(tmp2)):
                    sum+=int(tmp2[j])*(60**(2-j))*1000

                if sum in d.values():
                    for k in d.keys():
                        if d[k]==sum:
                            d.pop(k)
                            k=k+","+l[i]
                            d[k]=sum
                            break
                else:
                    d[l[i]]=sum
            res=sorted(d.items(),key=lambda x:x[1])

            for i in res:
                if "," in i[0]:
                    tmp=i[0].split(",")
                    for j in tmp:
                        print(j)
                else:
                    print(i[0])

            break
        except Exception as e:
            print(-1)
            break

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号