2024.4.7力扣每日一题——王位继承顺序

2024.4.7

      • 题目来源
      • 我的题解
        • [方法一 哈希表+多叉树的前序遍历](#方法一 哈希表+多叉树的前序遍历)

题目来源

力扣每日一题;题序:1600

我的题解

方法一 哈希表+多叉树的前序遍历

发现继承顺序的生成与多叉树的前序遍历一致,只需要在遍历过程中将已经去世的给排除就可以了。

如何存储继承关系?使用哈希表父亲,儿子集合

需要额外存储已经过世的人。注:有坑!!!!使用List要超时,只能使用Set
时间复杂度

  • ThroneInheritance(kingName):O(1);
  • birth(parentName, childName):O(1);
  • death(name):O(1);
  • getInheritanceOrder():O(n),其中 n 是当前树中的总人数。需要对整棵树进行一次前序遍历,时间复杂度为 O(n)。
    空间复杂度:O(n)。
java 复制代码
class ThroneInheritance {
    Map<String,List<String>> parent;
    Set<String> hasDead;
    String king;
    public ThroneInheritance(String kingName) {
        king=kingName;
        parent=new HashMap<>();
        hasDead=new HashSet<>();
    }
    
    public void birth(String parentName, String childName) {
        if(!hasDead.contains(parentName)){
            List<String> l=parent.getOrDefault(parentName,new ArrayList<>());
            l.add(childName);
            parent.put(parentName,l);
        }
    }
    
    public void death(String name) {
        hasDead.add(name);
    }
    
    public List<String> getInheritanceOrder() {
        List<String> res=new ArrayList<>();
        dfs(king,res);
        return res;
    }
    public void dfs(String p,List<String> res){
        if(!hasDead.contains(p))
            res.add(p);
        for(String s:parent.getOrDefault(p,new ArrayList<>())){
            dfs(s,res);
        }
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
huangdong_2 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天2 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录9172 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录9173 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
程序员三藏3 小时前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
一杯奶茶¥4 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码4 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|4 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
KANGBboy4 小时前
java知识五(继承)
java·开发语言
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试