华为OD机试真题 新系统 - 空间占用计算 (JavaPyCC++JsGo)

2 阅读4分钟

空间占用计算

2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

员工A 的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。

给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

规则说明

  1. 目录占用空间为其内部所有文件 Size 的总和,且目录本身 Size 为 0。
  2. 目录深度不高于 7 层,目录或文件名总长度不超过 128 字节。
  3. 当存在多个子项占用空间均为最大时,多个子项采用字符升序排列。
  4. 目标目录不在文件系统中时(输入路径前缀匹配不到任何路径),返回空列表。

输入描述

输入: 参数 1:要进行统计的目标目录。 参数 2:文件系统内的文件列表。 参数 3:文件 Size 列表,该列表中的数据和文件列表存在一一对应关系。

输出描述

输出: 目标目录一级子项(文件或子目录)中占用空间最大的项组成的列表。

示例1

输入

"/dir1/dir2-1", ["/dir0/dir1-1/file1-1", "/dir1/dir1-1/file1-1", "/dir1/dir2-1/file3-1", "/dir1/dir2-1/file3-2", "/dir1/dir2-1/dir3-1/file4-1"], [8192, 81920, 2048, 8192, 1024]

输出

["/dir1/dir2-1/file3-2"]

说明

/dir1/dir2-1 下共有三个一级子项 file3-1、file3-2、dir3-1,它们的占用空间统计如下:

  • file3-1:2048
  • file3-2:8192
  • dir3-1:1024,其内部所有文件的 Size 之和,由于内部只有一个文件 file4-1,因此和 file4-1 的 Size 一致。

其中 file3-2 占用的空间最大,因此返回 ["/dir1/dir2-1/file3-2"]。

示例2

输入

"/dir1", ["/dir0/dir2-1/file3-1", "/dir1/dir2-1/file3-1", "/dir1/dir2-1/file3-2", "/dir1/dir2-2/file3-3", "/dir1/file2-3"], [10240, 4096, 8192, 10240, 8192]

输出

["/dir1/dir2-1"]

说明

/dir1 下共有三个一级子项 dir2-1、dir2-2、file2-3,它们的占用空间如下:

解题思路

核心思想

这道题要求统计指定目标目录下一级子项(文件或子目录)的占用空间。

  1. 输入处理:输入包括目标目录路径 target、文件路径列表 files 和对应的文件大小列表 sizes
  2. 过滤路径:只有以 target + "/" 开头的路径才是该目标目录下的内容。
  3. 确定一级子项
    • 对于每个匹配的文件路径,去掉 target + "/" 前缀,剩余部分为 rest
    • 如果 rest 中不再包含斜杠 /,说明该项是目标目录下的一个文件。
    • 如果 rest 中包含斜杠 /,则 rest 中第一个斜杠之前的部分是目标目录下的一个子目录名。
    • 完整的一级子项路径为 target + "/" + (文件名或子目录名)
  4. 累加空间:使用哈希表(Map/Dictionary)统计每个一级子项的总大小。目录的大小是其内部所有文件大小的总和。
  5. 查找最大值:在统计结果中找到最大的占用空间值,并提取所有达到该最大值的子项路径。
  6. 排序输出:如果存在多个最大值项,按字符升序排列。

复杂度分析

  • 时间复杂度O(N×L)O(N \times L),其中 NN 是文件列表的长度,LL 是路径的最大长度。我们需要遍历每个文件路径并进行前缀匹配和字符串处理。
  • 空间复杂度O(N×L)O(N \times L),用于存储哈希表统计结果。