【程序员面试金典】请设计一个算法,求出a和b点的最近公共祖先的编号。

2023-11-19

题目描述

有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。

给定两个int a,b。为给定结点的编号。请返回ab的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。

测试样例:

2,3
返回:1

其实题目有意把根节点标为1,已经有点简化啦,这个时候node_father = node_child / 2。所以实现起来很简单。

class LCA {
public:
    int getLCA(int a, int b) {
        // write code here
        if (a == b)
            return a;
        return a>b? getLCA(a/2, b): getLCA(a, b/2);
    }
};

class LCA {
public:
    int getLCA(int a, int b) {
        // write code here
        //类似两个链表求相交
        int r = 2;
        int n = 1;
         
        int na, nb;
        while(r <= a) {
            r <<= 1;
            n++;
        }
        na = n;
        r = 2;
        n = 1;
        while(r <= b) {
            r <<= 1;
            n++;
        }
        nb = n;
         
        if(na > nb) {
            while(na > nb) {
                a >>= 1;
                na--;
            }
        } else {
            while(na < nb) {
                b >>= 1;
                nb--;
            }
        }
         
        while(a != b) {
            a >>= 1;
            b >>= 1;
        }
        return a;
    }
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【程序员面试金典】请设计一个算法,求出a和b点的最近公共祖先的编号。 的相关文章

  • System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本

    同学的电脑连接实验室的服务器时出现 System Data OracleClient 需要 Oracle 客户端软件 version 8 1 7 或更高版本 而我自己的电脑可以轻松连接服务器的数据库 首先 实验室用的是Oracle 12c
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • TensorRT(11):python版本序列化保存与加载模型

    TensorRT系列传送门 不定期更新 深度框架 TensorRT 文章目录 一 序列化保存模型 二 反序列化加载模型 三 完整代码 楼主曾经在TensorRT 7 python版本使用入门一文中简要记录了python版本是序列化与反序列化
  • 成为编程高手的二十二条军规

    1 大学生活丰富多彩 会令你一生都难忘 但难忘有很多种 你可以学了很多东西而难忘 也会因为什么都没学到而难忘 2 计算机专业是一个很枯燥的专业 但即来之 则安之 只要你努力学 也会发现其中的乐趣的 3 记住 万丈高楼平地起 基础很重要 尤其
  • 数据挖掘:数据(数据对象与属性类型)

    一 概述 现实中的数据一般有噪声 数量庞大并且可能来自异种数据源 数据集由数据对象组成 一个数据对象代表一个实体 数据对象 又称样本 实例 数据点或对象 数据对象以数据元组的形式存放在数据库中 数据库的行对应于数据对象 列对应于属性 属性是

随机推荐

  • WIN10下怎么找到MYSQL数据库中存储数据的位置。

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net qq 36098284 article details 79841920 今天我想找到
  • C++中Template的用法

    模板 Template 指C 程序设计设计语言中采用类型作为参数的程序设计 支持通用程序设计 C 的标准库提供许多有用的函数大多结合了模板的观念 如STL以及IO Stream 函数模板 函数模板定义一族函数 template1 cpp i
  • LDSC:连锁不平衡回归分析

    欢迎关注 生信修炼手册 LDSC全称如下 linkage disequilibrium score regression 简称LDSR或者LDSC 在维基百科中 对该技术进行了简单介绍 通过GWAS分析可以识别到与表型相关的SNP位点 然而
  • Kettle同步表数据null处理

    kettle同步数据时会将空字符串 自动转换为 null 如果表字段非空则会报错 解决方案如下 方案一 kettle菜单栏 编辑 编辑kettle properties文件 配置项 KETTLE EMPTY STRING DIFFERS F
  • 制作及运行 WebUI(NovelAI)Docker 镜像

    准备 Novel AI 模型文件 下载地址 magnet xt urn btih 5bde442da86265b670a3e5ea3163afad2c6f8ecc 只需要部分下载其中的文件 必须的文件 文件 stableckpt anime
  • Node.js知识点详解(一)基础部分

    模块 Node js 提供了exports 和 require 两个对象 其中 exports 是模块公开的接口 require 用于从外部获取一个模块的接口 即所获取模块的 exports 对象 接下来我们就来创建hello js文件 代
  • AI圈最新深度学习量化算法!

    文章摘自AAAI21 译者 一元 量化交易和投资决策是复杂的金融任务 依赖于准确的股票选择 目前深度学习学习的策略使用于股票的问题的方案面临两个重大局限 他们不直接优化利润方面的投资目标 将每只股票视为独立于其他股票 忽略了相关股票之间的丰
  • SpringCloudGateway路由策略:Nacos同集群优先

    使用版本
  • Python sorted()

    最简单的用法 gt gt gt sorted 36 5 12 9 21 21 12 5 9 36 反向排序的 gt gt gt sorted 36 5 12 9 21 reverse True 36 9 5 12 21 更高级的用法 gt
  • win和linux下如何给Qt应用程序添加图标

    给程序添加图标 包含2个部分 第一个 是可执行文件的图标或桌面快捷方式图标 第二个 是程序运行时窗口的图标 分别如下 接下来 我们分别在windows和linux下 讲解如何设置这2种图标 一 在windows系统下 1 设置应用程序图标
  • kubernates k8s minikube 安装 及使用 CentOS 7

    参考文章 CentOS 7安装minikube 重点参考 https www cnblogs com harmful chan p 12731014 html Linux环境上安装MiniKube https blog csdn net u
  • Gitlab merge 时提示”Source branch does not exist”问题的一个解决方案

    背景 将 gitlab 从服务器上迁到阿里云主机 版本从 9 4 1 ce 0 升级到 11 4 3 ce 0 迁移前后均使用 docker 部署 在云主机上运行后 发现在本地推送新分支到 gitlab 并进行 merge 操作时 merg
  • (嵌入式开发)STM32 网站、开发工具使用、参考、数据手册下载不在求人

    目录 一 ST 常用资源网 1 1 ST 之数据手册与用户手册区别 1 2 如何搜索下载对应的芯片文档呢 二 CubeMX 的下载 2 1 如何下载CubeMX 相关软件 2 2 如何自己安装 2 3 CubeMX 资源包当中有什么 三 K
  • Pandas对Excel行和列进行操作

    获取行数据 filename 测试表 xlsx df pd DataFrame pd read excel filename df2 df df 状态 等待付款 df 状态 已提交 print df loc 6000 tolist 输出第6
  • laravel-admin 在指定的相册下添加照片

    相册与照片是一对多的关系 有以下需求 1 点开一条相册数据看到相册的照片列表 2 为相册添加照片时 表单中要看到相册的基本信息 以下是实现步骤 第一步 构建带参数路由 router gt resource manage albumid ph
  • 常用的chrome配置参数

    让chromedriver不打开网页在后台进行 如果对chrome的启动参数感兴趣可以去看看脑补连接 from selenium import webdriver chrome options webdriver ChromeOptions
  • 解决pycharm安装python第三方库时遇到的问题——pycharm实体环境与虚拟环境

    目录 关于cmd打开cd操作的提示 1 pycharm虚拟环境和本地环境有啥区别 2 实体环境和虚拟环境怎么安装库 3 如何查询实体环境安装的库和虚拟环境安装的库 4 怎么切换本地环境或虚拟环境 5 总结使用pycharm时常见的3中环境
  • Jenkins插件开发之环境构建

    1 环境 1 1 jdk 1 1 1 下载 Java Platform Standard Edition 8 ReferenceImplementations 或其他途径下载 1 1 2 java环境配置 1 1 2 1 右键此电脑 属性
  • 【Python】实用小脚本

    本文整理了我在学习和工作中用到的实用python脚本 希望也能帮助到需要的小伙伴 文章目录 视频格式转换 pip快速下载命令 多进程处理百万图片数据集 视频格式转换 安装视频处理库moviepy pip install moviepy 安装
  • 【程序员面试金典】请设计一个算法,求出a和b点的最近公共祖先的编号。

    题目描述 有一棵无穷大的满二叉树 其结点按根结点一层一层地从左往右依次编号 根结点编号为1 现在有两个结点a b 请设计一个算法 求出a和b点的最近公共祖先的编号 给定两个int a b 为给定结点的编号 请返回a和b的最近公共祖先的编号