Day 29:1600. 王位继承顺序

news2024/11/29 6:30:03

Leetcode1600. 王位继承顺序

一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点,这个家庭里有人出生也有人死亡。
这个王国有一个明确规定的王位继承顺序,第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) ,给定一个人 x 和当前的继承顺序,该函数返回 x 的下一继承人。

Successor(x, curOrder):
    如果 x 没有孩子或者所有 x 的孩子都在 curOrder 中:
        如果 x 是国王,那么返回 null
        否则,返回 Successor(x 的父亲, curOrder)
    否则,返回 x 不在 curOrder 中最年长的孩子

比方说,假设王国由国王,他的孩子 Alice 和 Bob (Alice 比 Bob 年长)和 Alice 的孩子 Jack 组成。

  1. 一开始, curOrder 为 [“king”].
  2. 调用 Successor(king, curOrder) ,返回 Alice ,所以我们将 Alice 放入 curOrder 中,得到 [“king”, “Alice”] 。
  3. 调用 Successor(Alice, curOrder) ,返回 Jack ,所以我们将 Jack 放入 curOrder 中,得到 [“king”, “Alice”, “Jack”] 。
  4. 调用 Successor(Jack, curOrder) ,返回 Bob ,所以我们将 Bob 放入 curOrder 中,得到 [“king”, “Alice”, “Jack”, “Bob”] 。
  5. 调用 Successor(Bob, curOrder) ,返回 null 。最终得到继承顺序为 [“king”, “Alice”, “Jack”, “Bob”] 。

通过以上的函数,我们总是能得到一个唯一的继承顺序。

请你实现 ThroneInheritance 类:

  • ThroneInheritance(string kingName) 初始化一个 ThroneInheritance 类的对象。国王的名字作为构造函数的参数传入。
  • void birth(string parentName, string childName) 表示 parentName 新拥有了一个名为 childName 的孩子。
  • void death(string name) 表示名为 name 的人死亡。一个人的死亡不会影响 Successor 函数,也不会影响当前的继承顺序。你可以只将这个人标记为死亡状态。
  • string[] getInheritanceOrder() 返回 除去 死亡人员的当前继承顺序列表。

image.png

这里就是一个多叉树(族谱),王位继承顺序就是一个深度优先搜索的结果。
但是在这里,明显不适合使用树形结构来存储,因为出生人口的添加需要查询整个树才能查询到插入点,因此会浪费大量时间。
使用一个 Map来保存亲子关系,key为父,value是一个数组,保存所有的儿子。下一级的父子关系,不进行关联,直接在 Map中查找。
死亡则直接用一个 Set保存,之后进行深度优先搜索的时候判断是死亡。

完整代码

class ThroneInheritance {

    Map<String, List<String>> parents;
    Set<String> dead;
    String king;


    public ThroneInheritance(String kingName) {
        parents = new HashMap<>();
        dead = new HashSet<>();
        king = kingName;
    }
    
    public void birth(String parentName, String childName) {
        List<String> children = parents.getOrDefault(parentName, new ArrayList<String>());
        children.add(childName);
        parents.put(parentName, children);
    }
    
    public void death(String name) {
        dead.add(name);
    }
    
    public List<String> getInheritanceOrder() {
        List<String> res = new ArrayList<>();
        dfs(res, king);
        return res;
    }

    public void dfs(List<String> res, String name) {
        if (!dead.contains(name)) {
            res.add(name);
        }
        List<String> children = parents.getOrDefault(name, new ArrayList<String>());
        for (String childName : children) {
            dfs(res, childName);
        }
    }
}

/**
 * Your ThroneInheritance object will be instantiated and called as such:
 * ThroneInheritance obj = new ThroneInheritance(kingName);
 * obj.birth(parentName,childName);
 * obj.death(name);
 * List<String> param_3 = obj.getInheritanceOrder();
 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1848034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java内存溢出堆栈分析

一、背景 java应用系统内存溢出导致服务不可用&#xff0c;可手动生成dump文件或添加配置参数生成文件&#xff0c;进行dump文件分析定位具体内存OOM的原因&#xff0c;并优化修复。 二、JProfile分析 分析工具下载 https://download.csdn.net/download/xinpz/89463963 三、…

【案例分析:基于 Python 的几种神经网络构建 一维的和二维的全介质和金属SPR 材料的光谱预测与逆向设计】

案例分析&#xff1a;传播相位与几何相位超构单元仿真与器件库提取与二维超构透镜设计与传播光场仿真 案例分析&#xff1a; 片上的超构单元仿真与光学参数提取 案例分析&#xff1a;基于粒子群方法的耦合器设计 案例分析&#xff1a;基于 Python 的几种神经网络构建 一维的和二…

硫化物固态电解质在全固态锂电池制造领域发展潜力大

硫化物固态电解质在全固态锂电池制造领域发展潜力大 固态电解质主要包括氧化物、硫化物、聚合物等类型。氧化物固态电解质由于研发难度相对较低&#xff0c;是目前主流技术路线。硫化物固态电解质研发难度较高&#xff0c;但性能优异&#xff0c;特别适合制造全固态锂电池&…

【秋招刷题打卡】Day01-自定义排序

Day01-自定排序 前言 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;acwin…

信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621 2022 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 3.运行以下代码片段的行为是 ( ) int x 101; int y 201; int * p &x; int * q &y;…

【Golang - 90天从新手到大师】Day09 - string

系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据&#xff0c;但是通常是用来包含人类可读的文本。 len()返回字符串字节数目&#xff08;不是rune数&#xff09;。 通过索引可以访问某个字节值&#xff0c;0…

数据仓库 基础教程

数据仓库 基础教程 1. 数据仓库概述 数据仓库(Data Warehouse,简称DW或者DWH)是通过集成来自多个异构数据源的数据来构建的。它支持分析报告、结构化和/或特别查询和决策制定。本教程采用循序渐进的方法来解释数据仓库的所有必要概念。 “数据仓库”一词最早是由Bill Inmon在1…

VS编译器字体颜色设置

默认颜色不好看&#xff0c;颜色之间代码各个关系之间没有很强关联性所以要设置字体颜色 颜色一步到位版本&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;One dark Pro 第四步&#xff1a; 等待安装完后重启VS 点击Modify&#xff0c;一段时间结束后选…

142. 环形链表 II(中等)

142. 环形链表 II 1. 题目描述2.详细题解3.代码实现3.1 Python哈希表快慢指针 3.2 Java哈希表快慢指针 1. 题目描述 题目中转&#xff1a;142. 环形链表 II 2.详细题解 判断链表是否形成了环路&#xff0c;非常常规和直观的思路是&#xff0c;依次遍历每个结点并记录下来&…

我的Mac疯了!居然可以生成这样的奇葩AI图片!

在当今人工智能领域&#xff0c;midjourney无疑是生成图片的王者&#xff0c;但是苦于付费才能使用&#xff0c;今天我就给大家分享一下midjourney平替stable diffusion&#xff0c;实现本地生成不逊色于midjourney的图片 效果图 先上一个我自己生成的效果(就是在我的Mac上用C…

内江科技杂志内江科技杂志社内江科技编辑部2024年第13期目录

科教兴国 内江市科技局“五个强化”助力“五经普”工作有序推进 本刊通讯员; 1 内江市多措并举融入成渝中线科创走廊建设 本刊通讯员; 2 科学管理《内江科技》投稿&#xff1a;cnqikantg126.com 数字化社会公共图书馆的服务效能提升策略研究 闫永凤;臧萌;王亚博;王…

Uniapp App 微信登录苹果登录

核心逻辑&#xff0c;通过第三方登录获取唯一值&#xff08;openId | userId&#xff09;&#xff0c;调接口获取此唯一值对应的账号&#xff0c;如果未绑定跳转绑定页 微信授权返回的是一个会变的code&#xff08;每次都不一致&#xff09;&#xff0c;需要调用微信相关api换取…

二分练习题(C. Earning on Bets)

二分练习题&#xff08;C. Earning on Bets&#xff09; 原题链接&#xff1a;点击此处 Earning on Bets 题面翻译 有人提议让您玩一个游戏。在这个游戏中&#xff0c;有 n n n 种可能的结果&#xff0c;对于每一种结果&#xff0c;您都必须下注一定整数的硬币。如果 i …

永辉超市:胖东来爆改,成色几何?

单日业绩暴涨14倍。来&#xff0c;看看&#xff0c;这是被胖东来爆改后重新开业后的门店&#xff0c; 不出意外的流量爆炸。胖东来爆改&#xff0c;真是解决实体商超困境的灵丹妙药吗&#xff1f; 今天我们聊聊——永辉超市 最近两年实体商超日子都不好过&#xff0c;去年13家…

36 - shell之sed

sed grep就是查找文本当中的内容&#xff0c;扩展正则表达式。 一、sed 1.1、sed的定义 sed是一种流编辑器&#xff0c;一次处理一行内容。 如果只是展示&#xff0c;会放在缓冲区&#xff08;模式空间&#xff09;&#xff0c;展示结束&#xff0c;会从模式空间把结果删除…

约束求解器方案设计

1.约束求解介绍 给定一个几何对象&#xff08;点、直线段、圆、圆弧、平面等&#xff09;的集合G和一个关于集合G中几何对象之间约束&#xff08;点的位置、直线段的长度、圆弧对应的圆心角角度、垂直、相切等&#xff09; 的集合C&#xff0c;则在二元组(G&#xff0c;C)中根…

探索全球奇趣,开启你的海外盲盒app开发之旅!

在追求个性化和独特体验的今天&#xff0c;你是否渴望拥有一款能够带你穿越国界、领略世界各地新奇好物的App&#xff1f;为了满足广大用户对于未知的好奇与探索欲望&#xff0c;我们精心打造了一款海外盲盒App&#xff0c;带你踏上一段充满惊喜的全球购物之旅。 一、产品介绍…

DVWA 靶场 Authorisation Bypass 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

山东济南比较出名的起名大师的老师,中国最厉害的改名大师颜廷利:短命的小草,年年自损;长寿的大树,万古长青。。。(升命学说)

在中国第一起名大师的老师颜廷利教授的《升命学说》中&#xff0c;通过“净化论”、“和合法则”、“唯悟主义”以及“镜正理念”的阐述&#xff0c;我们得以窥见生命的不同维度。他以自然界中短命的小草与长寿的大树为例&#xff0c;揭示了生命形态的对比与哲理。 小草&#…

106、从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 提示: 1 < inorder.length < 3000postorder.length inorder.length-3000 < inorder[i]…