当前位置: 首页 > news >正文

文件目录大小

一、题目描述

一个文件目录的数据格式为: 目录id,本目录中文件大小,(子目录id列表)其中目录id全局唯一,取值范围[1,200],本目录中文件大小范围[1,1000],子目录id列表个数[0,10]。

例如 : 1 20 (2,3)表示目录1中文件总大小是20,有两人子目录,id分别是2和3。

现在输入一个文件系统中所有日录信息,以及待查询的目录id,返回这个目录和及该目录所有子目录的大小之和。

二、输入输出描述

输入描述
  • 第一行:两个数字M,N,分别表示目录的个数和待查询的目录id.1≤M≤100,1≤N≤200;
  • 接下来M行,每行为1个目录的数据,格式:目录id 本目录中文件大小 子目录id列表(以逗号分隔)。
输出描述
  • 待查询目录及其子目录的大小之和

三、示例

输入

3 1
3 15 (0)
1 20 (2)
2 10 (3)

输出45
说明目录1大小为20,包含一个子目录2(大小为10),子目录2包含人子目录3(大小为15),总的大小为20+10+15=45
输入4 2
4 20 ()
5 30 ()
2 10 (4,5)
1 40 ()
输出60
说明目录2包含2个子目录4和5,总的大小为10+20+30 = 60

四、解题思路

1. 核心思想

树形结构存储 + 深度优先搜索(DFS)递归累加:先用哈希表存储所有目录的结构,再通过递归遍历目标目录的所有子目录,把自身大小和所有子目录大小相加,得到总大小。

2. 问题本质分析

这是一个树形结构递归求和问题

  • 数据结构:目录树(一个目录可以包含多个子目录,是典型的树形结构)
  • 要求:计算指定根目录 + 所有下级子目录的大小总和
  • 本质:树的遍历 + 节点值累加

3. 核心逻辑

  1. 解析输入,把每个目录的id、大小、子目录存储到Map中;
  2. 从目标目录开始递归
    • 先加上当前目录自身大小
    • 再递归计算每一个子目录的总大小
    • 所有子目录结果累加
  3. 递归结束后返回完整总和

4. 步骤拆解

  1. 输入读取与解析

    • 读取目录数量 M 和目标目录 ID
    • 逐行解析目录信息,拆分出 id、自身大小、子目录列表
  2. 结构存储

    • 使用Map<Integer, Dir>存储所有目录
    • 方便通过目录 id 快速找到对应目录信息
  3. 递归 DFS 计算总大小

    • 获取当前目录大小
    • 遍历所有子目录,递归计算子目录总大小
    • 累加所有值得到当前目录的总大小
  4. 输出结果

    • 打印目标目录的最终总大小

五、代码实现

import java.util.*; public class Main { // 目录结构:key=目录id,value=[本目录大小, 子目录id列表] static Map<Integer, Dir> map = new HashMap<>(); static class Dir { int size; List<Integer> children; public Dir(int size, List<Integer> children) { this.size = size; this.children = children; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int target = sc.nextInt(); sc.nextLine(); // 换行 for (int i = 0; i < M; i++) { String line = sc.nextLine().trim(); // 拆分 id 和大小部分 String[] left = line.split("\\(")[0].trim().split("\\s+"); int id = Integer.parseInt(left[0]); int size = Integer.parseInt(left[1]); // 解析子目录 List<Integer> children = new ArrayList<>(); String childStr = line.split("\\(")[1].split("\\)")[0].trim(); if (!childStr.isEmpty() && !childStr.equals("0")) { String[] cs = childStr.split(","); for (String c : cs) { children.add(Integer.parseInt(c.trim())); } } map.put(id, new Dir(size, children)); } // 递归计算总和 System.out.println(dfs(target)); } // 递归:求当前目录 + 所有子目录总和 static int dfs(int id) { Dir dir = map.get(id); int total = dir.size; for (int child : dir.children) { total += dfs(child); } return total; } }
http://www.jsqmd.com/news/685454/

相关文章:

  • 2026移门厂家加盟哪个品牌比较好?玻璃门品牌加盟源头厂家与靠谱品牌推荐 - 栗子测评
  • Docker守护进程配置、cgroup资源隔离与seccomp默认策略——金融生产环境必须禁用的5个默认选项,你关了吗?
  • Qianfan-OCR部署教程:模型路径/root/ai-models/baidu-qianfan/Qianfan-OCR配置规范
  • 2026年工业平台钢格板哪家好?大型镀锌钢格栅定制厂家、工程项目定点供应商实力盘点 - 栗子测评
  • 2026武汉AI营销公司对比评测:3家头部机构怎么选
  • 从KITTI到SemanticKITTI:手把手教你用Python玩转这个自动驾驶点云数据集
  • 从特征匹配到端到端学习:深度单应性估计的范式革新
  • 嵌入式面试题:一般来说,对于舵机和电机,PWM的高电平和频率分别决定什么?
  • 【C# .NET 11 AI推理加速实战白皮书】:微软内部未公开的5大GPU内存优化技巧首次披露
  • 贵阳企业AI落地难?本土服务商问题拆解与系统化解决方案
  • 2026颜值高的玻璃门工厂推荐:阿玛尼夹丝玻璃门/极窄门源头工厂与三联动推拉门品牌选型指南 - 栗子测评
  • 2026年镀锌钢格栅板哪家好?不锈钢钢格板、压焊钢格板、热镀锌钢格板源头工厂实力对比 - 栗子测评
  • Spring Boot 4.0 Agent-Ready 架构升级指南(Agent兼容性断层预警):仅3%团队提前识别ClassLoader隔离失效风险
  • 金仓老旧项目改造-15-[vibe编程vlog]
  • 为什么你的Alpine镜像在M1 Mac上秒启,在Jetson Orin上却卡死127秒?——Docker跨架构调试中的musl/glibc+浮点协处理器双维度失效分析
  • Blazor组件库选型生死局:MudBlazor vs AntDesign Blazor vs 新晋冠军FluentUI Blazor(2026 Q1真实项目压测对比)
  • 长芯微LDC82410完全P2P替代ADS124S08,是一款精密12通道多路复用ADC
  • gt-checksum 2.0.0 版本重磅升级:多维度优化,让数据库校验更高效精准!
  • 公考备考学历提升:自考成考/自考本科/成人高考专升本/成人高考函授学历/成人高考函授站/成人高考国家开放大学/成人高考大专/选择指南 - 优质品牌商家
  • 2026年知名的宁波电机优质厂家推荐榜 - 品牌宣传支持者
  • 【Docker安全加固黄金标准】:GPG+OCI签名+KMS密钥轮转——金融级镜像验签三重防护体系
  • Phi-3.5-mini-instruct实际效果对比:同4090卡上vs Qwen2.5-1.5B代码任务表现
  • LangGraph 与 ReAct Agent 调试技巧:从日志到可视化全解析
  • Java Loom响应式改造失败率高达67%?资深专家复盘17个真实故障场景及可复用修复模板
  • Ubuntu 24.04下MT7922蓝牙驱动问题解决方案
  • 2026年4月北京本地收车权威机构推荐榜:北京无套路收车/北京正规收车/北京淘汰车回收/北京私家车回收/北京诚信收车/选择指南 - 优质品牌商家
  • 17-4Ph不锈钢厂商那家好?2026年17-4Ph不锈钢厂商推荐 - 品牌2026
  • Wasserstein GAN:原理、实现与实战调优
  • 从采集到冻存:如何确保血清血浆样本在多因子检测中的可靠性?
  • 番外篇第10集:大结局!AIOps 统一可视化大屏与年度运维报告自动生成