力扣 1483. 树节点的第 K 个祖先

news2024/12/25 0:55:17

力扣 1483. 树节点的第 K 个祖先

题目地址:https://leetcode.cn/problems/kth-ancestor-of-a-tree-node/

  1. 暴力查找(超时)
  2. 哈希查找(超空间)
  3. 树上倍增

预处理

ancestor 数组记录了第 i 个 node 的倍增祖先,假设 i 为 100,即
ancestor[100][0] 记录了第 100 个 node 的第 1 个祖先
ancestor[100][1] 记录了第 100 个 node 的第 2 个祖先
ancestor[100][2] 记录了第 100 个 node 的第 4 个祖先
……
ancestor[100][j] 记录了第 100 个 node 的第 2j 个祖先

动态规划转移方程

ancestor[i][j] = ancestor[k][j-1], k = ancestor[i][j-1]
即当前节点的第 2j个祖先,是他的第 2j-1 个祖先的第 2j-1 个祖先

查询

查询第 100 个 node 的第 k 个祖先节点,假设 k 为 25,即
k 的二进制表示为 11001,原查询可拆分为:
查询第 100 个 node
的第 20 个祖先节点
的第 23 个祖先节点
的第 24 个祖先节点
如下图:

参考代码(TS)

/**
 * 3. 倍增
 * 时间 O(nlogn + logk)  476ms   33%
 * 空间 O(nlogn)         85.8mb  72%
 */
class TreeAncestor {
    private level: number;
    private ancestor: number[][];

    /**
     * 转移方程 ancestor[i][j] = ancestor[k][j-1], k = ancestor[i][j-1]
     * i 的倍增层有没有父,有就跳到父的倍增层
     * 当前节点的第 2^j 个祖先,是他的第 2^(j-1) 个祖先的第 2^(j-1) 个祖先
     * 时间 O(nlogn)
     * 空间 O(nlogn)
     */
    constructor(n: number, parent: number[]) {
        this.level = Math.ceil(Math.log2(n)); // log2(50000) = 16

        this.ancestor = parent.map((pi) => {
            const arr = new Array(this.level);
            arr.fill(-1);
            arr[0] = pi;
            return arr;
        });

        for (let j = 1; j < this.level; j++) {
            for (let i = 0; i < n; i++) {
                const k = this.ancestor[i][j - 1];
                if (k > -1) {
                    this.ancestor[i][j] = this.ancestor[k][j - 1];
                }
            }
        }
    }

    /**
     * 返回树节点的第 K 个祖先节点
     * 时间 O(logk)
     * 空间 O(1)
     */
    getKthAncestor(node: number, k: number): number {
        let _node = node;
        for (let j = 0; j < this.level; j++) {
            if (((k >> j) & 1) !== 0) {
                _node = this.ancestor[_node][j];
                if (_node === -1) return -1;
            }
        }
        return _node === node ? -1 : _node;
    }
}

其他相关:
BL(Binary Lifting)倍增法
ST(Sparse Table)稀疏表
LCA(Least Common Ancestors)最近公共祖先问题

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

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

相关文章

深度相机、实验箱、扫描仪、机器狗…… 奥比中光超强性能3D视觉应用亮相VALSE 2023

导读 6月10日-12日&#xff0c;VALSE 2023视觉与学习青年学者研讨会在江苏无锡举办&#xff0c;奥比中光作为金牌赞助商&#xff0c;携Femto Mega与Gemini 2系列3D相机以及3D视觉实验箱开发套件、手持3D扫描仪、四足机器狗等创新解决方案参展&#xff0c;为3D视觉开发者提供多…

苹果app上线审核被拒 Guideline 1.2 - Safety - User Generated Content

苹果的App Review We found in our review that your app includes user-generated content but does not have all the required precautions. Apps with user-generated content must take specific steps to moderate content and prevent abusive behavior. Next Steps T…

Spark大数据处理学习笔记2.1 初识Spark

文章目录 一、学习目标二、spark概述&#xff08;一&#xff09;Spark的组件1、Spark Core2、Spark SQL3、Spark Streaming4、MLlib5、Graph X6、独立调度器、Yarn、Mesos &#xff08;二&#xff09;Spark的发展史1、发展简史2、目前最新版本 三、spark特点&#xff08;一&…

现在的00后,真是不要命了?

谁说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;上个月我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪22K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 …

Python与大数据:Hadoop、Spark和Pyspark的应用和数据处理技巧

章节一&#xff1a;引言 在当今的数字时代&#xff0c;数据成为了无处不在的关键资源。大数据的崛起为企业提供了无限的机遇&#xff0c;同时也带来了前所未有的挑战。为了有效地处理和分析大规模数据集&#xff0c;必须依靠强大的工具和技术。在本文中&#xff0c;我们将探讨…

Spring Boot整合MyBatis

文章目录 一、Spring Boot数据访问概述二、Spring Boot 整合MyBatis&#xff08;一&#xff09;基础环境搭建1、数据准备&#xff08;1&#xff09;创建博客数据库&#xff08;2&#xff09;创建文章表&#xff08;3&#xff09;文章表插入记录&#xff08;4&#xff09;创建评…

车队试验的远程实时显示方案

风丘科技推出的数据远程实时显示方案可更好地满足客户对于试验车队远程实时监控的需求&#xff0c;真正实现试验车队的远程管理。随着新的数据记录仪软件IPEmotion RT和相应的跨平台显示解决方案的引入&#xff0c;让我们的客户端不仅可在线访问记录器系统状态&#xff0c;还可…

Overhaul Distillation(ICCV 2019)原理与代码解析

paper&#xff1a;A Comprehensive Overhaul of Feature Distillation official implementation&#xff1a;GitHub - clovaai/overhaul-distillation: Official PyTorch implementation of "A Comprehensive Overhaul of Feature Distillation" (ICCV 2019) 本文的…

【状态估计】基于数据模型融合的电动车辆动力电池组状态估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

LVS负载均衡与DR模式

LVS负载均衡与DR模式 一、DR模式的特点二、LVS-DR中的ARP问题1.VIP地址相同导致响应冲突2.返回报文时源地址使用VIP&#xff0c;导致网关设备的ARP缓存表紊乱 三、DR模式 LVS负载均衡群集部署实验准备实验部署实验步骤1.配置负载调度器&#xff08;192.168.30.10&#xff09;2.…

荣登第一,亚马逊云科技帮助用户实现云上快速部署,轻松维护不同类型的数据库

近期&#xff0c;Gartner发布了2022年全球数据库管理系统&#xff08;Database Management System&#xff0c;DBMS&#xff09;市场份额报告&#xff0c;在这一排名中出现了微妙变化&#xff0c;那就是亚马逊云科技超过微软&#xff0c;登上了第一“宝座”&#xff0c;占据了市…

MySQL数据库常用命令

mysql是不见 分号 不执行&#xff0c;分号表示结束。\c可以终止命令的输入。 1.登录数据库 mysql -u root -p然后在输入密码 root 2.查看数据库(以分号结尾) show databases; 3.创建数据库 pk create database pk; 4.使用数据库pk use pk; 5.删除数据库pk drop database…

【2023电工杯】B题人工智能对大学生学习影响的评价26页论文及python代码

【2023电工杯】B题人工智能对大学生学习影响的评价26页论文及python代码 1 题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国…

5分钟让你明白什么是面向对象编程

相信很多刚开始接触编程的小伙伴&#xff0c;对于什么是面向对象&#xff0c;什么是面向过程都是一脸懵逼的。 网上关于这两个的回答真的很多&#xff0c;但是都有一个共同特点&#xff1a;------------不容易懂。 让我们来看看某百科给出的定义: 能不能好好说话&#xff01;…

浮点数在内存中的运算

他们力量的源泉&#xff0c;是值得信赖的搭档以及想要保护的对象还有强大的敌人 本文收录于青花雾气-计算机基础 往期回顾 从汇编代码探究函数栈帧的创建和销毁的底层原理 从0到1搞定在线OJ 数据在内存中的存储 计算机存储的大小端模式 目录 浮点数的二进制转化及存储规…

pySCENIC单细胞转录因子分析更新:数据库、软件更新

***pySCENIC全部往期精彩系列&#xff1a;1、PySCENIC&#xff08;一&#xff09;&#xff1a;python版单细胞转录组转录因子分析2、PySCENIC&#xff08;二&#xff09;&#xff1a;pyscenic单细胞转录组转录因子分析3、PySCENIC&#xff08;三&#xff09;&#xff1a;pyscen…

我的创作纪念日之这四年的收获与体会

第一次来写自己的创作纪念哈&#xff0c;不知不觉都已经过去整整四年了&#xff0c;好与不好还请大家担待&#xff1a; 1、机缘 1. 记得是大一、大二的时候就听学校的大牛说&#xff0c;可以通过写 CSDN 博客&#xff0c;来提升自己的代码和逻辑能力&#xff0c;以及后面工作…

图解LeetCode——994. 腐烂的橘子

一、题目 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回直到单元格…

醒醒吧,连新来的实习生都在进阶自动化,你还在点点点吗,聪明人都在提升自己!

5年测试老兵了&#xff0c;真的很迷茫&#xff0c;觉得自己不再提升自己&#xff0c;真的会被实习生替代。 很多朋友跟我吐槽&#xff0c;说自己虽然已经工作3-4年&#xff0c;可工作依旧是点点点&#xff0c;新来的实习生用一周的时间就把工作内容学会了&#xff0c;他的压力…

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验?

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验&#xff1f; 起因 Sakurairo 主题支持了基于 ChatGPT 的 AI 摘要功能&#xff0c;我有点眼红&#xff0c;但是因为那是个主题限定功能&#xff0c;而我用的又是 Argon&#xff0c;遂想着让 Argon 也支持 AI 摘要功能。…