华为OD机考双机位C卷 - 文件存储系统的排序(Java & Python & JS & GO & C++ & C)
文件存储系统的排序
2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷
华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)
题目描述
在一个网络文件存储系统中,有众多的文件按照不同的文件夹进行分类存储。现在要对这些文件进行整理排序,以便便于快速地查找特定文件。每个文件都有一个创建地时间戳(用整数标识,代表从特定时刻到文件创建时所经历地秒数),并且文件夹之间存在层级关系。现要求实现一个函数,对给定地某个文件夹下的所有文件(包含子文件夹中的文件)按照创建时间戳进行排序,可采用你熟悉的排序算法。
输入描述
首先输入一个整数n,表示接下来要输入的文件及文件夹信息的行数。
然后输入一指定文件夹的名称,用于说明获取哪个文件夹下的全部文件,并进行排序;
最后逐行输入文件或文件夹信息,行数为第一句输入的整数n。对于文件,每行格式为: 文件名 创建时间戳;对于文件夹,每行格式为: 文件夹名 -1(-1 表示这是一个文件夹)。如果文件夹包含子文件或子文件夹,则在后序行中继续输入其内。通过缩进(四个短横线)表示层级关系(例如,子文件或子文件的信息相比其父文件夹缩进4个短横线)。
输出描述
输出排序后的文件列表,每行格式为:文件名 创建时间戳,按照时间戳从小到大进行排序。
补充说明: 文件和文件夹名称只会出现A-Za-z0-9和.不会出现特殊字符。不会出现相同时间戳的文件,不会出现重名的文件或文件夹。
如果文件系统中不存在改文件,则返回字符串"No file"
示例1
输入
5
Documents
Documents -1
----file1.txt 1600000000
----file2.txt 1600000100
----SubFolder1 -1
--------file3.txt 1600002000
输出
fiel1.txt 1600000000
fiel2.txt 1600000100
fiel3.txt 1600002000
说明
示例2
输入
5
Video
Video -1
----SubFolder0 -1
----SubFolder1 -1
----SubFolder3 -1
--------SubFolder4 -1
输出
No file
说明
如果待排序的文件夹下没有该文件,则返回"No file"
示例3
输入
7
SubFolder2
Documents -1
----SubFolder1 -1
--------file0.txt 1600000900
----SubFolder2 -1
--------file1.txt 1600000300
--------file2.txt 1600000200
--------file3.txt 1600000100
输出
file3.txt 1600000100
file2.txt 1600000200
file1.txt 1600000300
说明
第一行表示总计有7行文件和文件夹信息输入
第二行表示需要排序SubFolder2路径下的文件夹
第三行开始为输入的7行文件和文件夹信息
解题思路
核心思想
本题的核心是将缩进表示的文本结构转化为多叉树结构,然后在树上进行搜索和遍历。
- 树的构建:
- 利用栈(Stack)来维护当前的父节点路径。
- 每一行输入的前导短横线数量决定了节点的深度
level。 - 关键逻辑:在处理新节点之前,如果栈的大小(即当前深度)大于节点的
level,说明栈顶的文件夹已经处理完毕,需要弹出,直到栈顶节点就是当前节点的父节点。
- 目标查找:
- 遍历构建好的树(可能是森林),找到指定名称的文件夹节点。
- 递归收集:
- 从目标文件夹开始,递归遍历所有子孙节点。
- 如果是文件,加入结果集;如果是文件夹,继续递归。
- 排序输出:
- 对结果集按时间戳排序并输出。
复杂度分析
- 时间复杂度:$O(N \log N)$。构建树需要 $O(N)$,查找和收集文件最坏 $O(N)$,排序需要 $O(N \log N)$。
- 空间复杂度:$O(N)$。用于存储树结构和递归栈。
浙公网安备 33010602011771号