[带余除法寻找公共节点]二叉树

二叉树

题目描述


如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, ... ,1)和(y1, y2, ... ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi 和 yj开始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,... 现在的问题就是,给定x和y,要求xi(也就是yj)。

关于输入

输入只有一行,包括两个正整数x和y,这两个正整数都不大于1000。

关于输出

输出只有一个正整数xi。

例子输入
10 4
例子输出
2
解题分析

这个问题的关键在于理解题目中的二叉树的特性。在这个二叉树中,每个节点 i 的两个子节点是 2*i 和 2*i+1。因此,每个节点 i 的父节点是 i/2。这是一个关键的性质,因为它意味着我们可以通过除以2来找到任何节点的父节点。

给定两个节点 x 和 y,我们的目标是找到他们的最近公共祖先。由于我们可以通过除以2来找到任何节点的父节点,因此一个直观的方法是从 x 和 y 开始,不断地找他们的父节点,直到我们找到一个公共的节点。这个公共的节点就是他们的最近公共祖先。

在具体实现上,我们定义了一个函数`findCommonAncestor`,它接受两个整数 x 和 y 作为输入,返回这两个整数在二叉树中的最近公共祖先。在这个函数中,我们使用了一个循环,不断地将较大的数除以2,直到 x 和 y 相等。这是因为在这个二叉树中,一个节点的父节点总是它的一半,所以我们可以通过不断地将较大的数除以2来找到两个节点的最近公共祖先。

在`main`函数中,我们从用户那里获取输入的 x 和 y,调用`findCommonAncestor`函数找到他们的最近公共祖先,并打印出结果。

这个算法的时间复杂度是 O(log n),其中 n 是输入的节点的编号。这是因为在最坏的情况下,我们需要找到节点 1,这需要做 log n 次除法操作。因此,这个算法是非常高效的。

代码实现
#include <stdio.h>int findCommonAncestor(int x, int y) {while (x != y) {if (x > y) {x /= 2;} else {y /= 2;}}return x;
}int main() {int x, y;scanf("%d %d", &x, &y);printf("%d\n", findCommonAncestor(x, y));return 0;
}

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

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

相关文章

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式

更新时间&#xff1a;2023年10月31日 11:37:53 作者&#xff1a;产品人小柒 dbeaver数据库连接工具,可以支持几乎所有的主流数据库.mysql,oracle.sqlserver,db2 等等,这篇文章主要给大家介绍了关于DBeaver连接MySQL提示"Public Key Retrieval is not allowed"问…

在CentOS上安装Nginx服务

配置EPEL源&#xff1a;首先&#xff0c;你需要安装EPEL源&#xff0c;这是一个为RHEL和CentOS提供额外软件包的存储库。你可以通过运行以下命令来安装EPEL源&#xff1a; sudo yum install -y epel-release sudo yum -y update安装Nginx&#xff1a;接下来&#xff0c;你可以…

Elasticsearch 聚合查询(Aggregation)详解

Elasticsearch中的聚合查询&#xff0c;类似SQL的SUM/AVG/COUNT/GROUP BY分组查询&#xff0c;主要用于统计分析场景。 实例&#xff1a; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.…

yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求&#xff0c;要更新迭代一个场景的检测模型&#xff0c;甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便)&#xff0c;而我训练模型确实要标注好的图片形式。 根据这些条件的话&#xff0c;思路应该是要这样的&#xff1a;首先使用现有的…

记一次oracle错误处理

16:00:05 SQL> alter database open; alter database open * 第 1 行出现错误: ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 16:00:49 SQL> startup ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它 16:02:56 SQL> shutdown immediate O…

大数据平台/大数据技术与原理-实验报告--实战HDFS

实验名称 实战HDFS 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.23-2023.10.27 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统的linu…

15. 三树之和(双指针)

这道题的思路是排序双指针。 对于排好序的数组&#xff0c;存在以下几种情况&#xff1a; 当元素i为正数时&#xff0c;其之后的数字不在存在三数之和等于0的情况了。当元素i为负数或0时&#xff0c;为了避免重复&#xff0c;依次从头遍历数组&#xff0c;检查当前元素i之后的…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳排放分摊的综合能源服务商交易策略》

这篇文章的标题表明它将讨论一个关于综合能源服务商交易策略的主题&#xff0c;而在这个策略中&#xff0c;特别考虑了碳排放分摊的因素。以下是对标题中各关键词的解读&#xff1a; 综合能源服务商&#xff1a; 这指的是在能源领域提供多种服务的企业或组织&#xff0c;可能涵…

蓝桥杯day01——负二进制数相加

题目描述 给出基数为 -2 的两个数 arr1 和 arr2&#xff0c;返回两数相加的结果。 数字以 数组形式 给出&#xff1a;数组由若干 0 和 1 组成&#xff0c;按最高有效位到最低有效位的顺序排列。例如&#xff0c;arr [1,1,0,1] 表示数字 (-2)^3 (-2)^2 (-2)^0 -3。数组形式…

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web应用程序之间进行通信的协议&#xff0c;通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

C++之哈希

unordered系列容器的效率之所以比较高(尤其是查找),是因为它底层使用了哈希结构,即哈希表. 哈希概念 前言: 顺序结构以及平衡树中, 元素关键码与其存储位置之间没有对应的关系, 因此在查找一个元素 时, 必须要经过关键码的多次比较. 顺序查找时间复杂度为O(N), 平衡树中为树的…

ESP32-Web-Server编程- JS 基础 4

ESP32-Web-Server编程- JS 基础 4 概述 HTML 内联事件处理器&#xff0c;你永远不应该使用 HTML 事件处理器属性——因为那些已经过时了&#xff0c;使用它们是不好的做法。 在前端编程中&#xff0c;除了将期望发生的事件写为 JS 文件外&#xff0c;还可以使用一些组件自带…

java编程:⼀个⽂件中存储了本站点下各路径被访问的次数,请编程找出被访问次数最多的10个路径

题目 编程题&#xff1a;⼀个⽂件&#xff08;url_path_statistics.txt&#xff09;中存储了本站点下各路径被访问的次数 请编程找出被访问次数最多的10个路径时间复杂是多少&#xff0c;是否可以优化&#xff08;假设路径数量为n&#xff09;如果路径访问次数⽂件很⼤&#x…

Unity中Shader的BRDF解析(二)

文章目录 前言一、回顾一下上一篇的结尾在这里插入图片描述 二、我们来解析一下 UNITY_PBS_USE_BRDF1&#xff08;高配&#xff09;1、迪士尼BRDF原则2、迪士尼的漫反射函数3、参数&#xff1a;perceptualRoughness&#xff08;感性的粗糙度&#xff09;4、参数&#xff1a;hal…

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…

NET MVC中使用Element-Plus框架编写组件

一、目的 在NET MVC中使用Element-Plus编写可重复使用的组件。 二、准备工作 2.1 NET MVC项目 2.2 MVC项目中使用Element-Plus框架。不熟悉的可以参考此文章&#xff1a; NET MVC中如何使用Element-Plus-CSDN博客 三、组件编写 3.1、新建一个MVC的部分视图页面&#xff…

完整版本会声会影2024新功能介绍

会声会影视频编辑软件&#xff0c;是视频制作初学者的法宝。其友好的操作界面&#xff0c;让视频制作小白也能轻松上手&#xff0c;丰富的媒体库资源&#xff0c;只需一拖一放就能快速导入编辑轨道。多轨道式的编辑功能&#xff0c;让各种素材的搭配使用更加得心应手。 会声会影…

管网/黑臭水/污水水质监测系统

随着城市化进程的加快&#xff0c;城市水务管理面临着越来越多的挑战。其中&#xff0c;管网、黑臭水、污水等水质监测问题尤为突出。为了解决这些问题&#xff0c;越来越多的城市开始应用先进的水质监测系统。 一、系统概述 管网/黑臭水/污水水质监测系统是一款集成了在线监测…

【Python炫技】如何突破网站识别爬取功能?

文章目录 概要技术细节小结 概要 现在有很多网站&#xff0c;已经能够通过JA3或者其他指纹信息&#xff0c;来识别你的请求是不是Requests发起的。这种情况下&#xff0c;你无论怎么改Headers还是代理&#xff0c;都没有任何意义。 我之前写过一篇文章&#xff1a;Python如何…

三元表达式原理及例子js

三元表达式在JavaScript中也是一种简单的条件语句&#xff0c;其语法格式如下&#xff1a; variable condition ? value_if_true : value_if_false;其中&#xff0c;condition是一个布尔表达式&#xff0c;如果它的值为True&#xff0c;那么value_if_true的值将被赋给variab…