当前位置: 首页 > news >正文

【编程强训11】最近公共祖先+求最大连续bit数

1.最近公共祖先 ->链接

【描述】
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。

【测试样例】:

2,3

返回:1

【题目解析】:

最近公共祖先表示距离两个节点最近的公共父节点,这道题考察二叉树。

【解题思路】:

题目所描述的满二叉树举例如下:
在这里插入图片描述
我们以2和7为例,寻找2、7的最近公共祖先。

我们知道上述树中子节点与父节点之间的关系为root = child / 2,将a=2,b=7

所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先.

比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1,

代码实现:

class LCA {
public:
    int getLCA(int a, int b) {
        while(a!=b)
        {
            if(a>b)
            {
                a=a/2;
            }
            else{
                b=b/2;
            }
        }
        return a;
    }
};

2.求最大连续bit数 ->链接

【描述】
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000
进阶:时间复杂度:O(logn)\O(logn) ,空间复杂度:O(1)\O(1)

【输入描述】
输入一个int类型数字

【输出描述】
输出转成二进制之后连续1的个数

示例1

输入: 200

输出: 2

说明:200的二进制表示是11001000,最多有2个连续的1。

【题目解析】:

这道题考察位运算

【解题思路】:

我们以200为例:

首先定义count来计数连续1的个数,定义max_count来更新当前最多的连续1(两者均初始化为0)

我们通过200的二进制和1的二进制进行按位与操作,来判断当前最低位是否为1,

如果为1

count++;
max(max_count,count);

如果不为1,停止连续1的累加,将count置为0,即count=0;

进行一次判断之后,通过右移一位当前数来获取次低位的判断,直到右移32位之后该数变为0,停止。

在这里插入图片描述
代码实现:

#include <iostream>
//#include<algorithm>
using namespace std;

int main()
{
    int n=0;
    while(cin>>n)//多次输入
    {
        int count=0;
        int max_count=0;
        
        while(n)//右移32为之后n变为0
        {
            if(n&1)
        {
            count++;
            max_count=max(max_count,count);
        }
            else{
            count=0;
            }
            n=n>>1;
        }
      cout<<max_count<<endl;  
    }
    return 0;
}

– the End –

感谢阅读!

本文收录于专栏:编程强训
关注作者,持续阅读作者的文章,学习更多知识!
https://blog.csdn.net/weixin_53306029?spm=1001.2014.3001.5343

————————————————

相关文章:

  • 走进Redis之配置文件的修改使用
  • java基于springboot+vue的园区入驻停车管理系统
  • 踩坑篇-Nacos+Sping-gateway+shiro实现分布式认证权限框架
  • SSM美众针纺有限公司人事管理毕业设计-附源码051708
  • 超详细的VsCode创建SpringBoot项目(图文并茂)
  • Python、设计原则和设计模式-对象行为类设计模式(一)
  • 利用Hugging Face中的模型进行句子相似性实践
  • 【华为机试真题 JAVA】高矮个子排队-100
  • 第12章Linux实操篇-网络配置
  • parallelStream的讲解
  • Rancher 2.6 全新 Logging 快速入门(2)
  • 络达开发----如何开启AGC功能
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • 阿里云服务器包年包月收费模式常见问题汇总(官方资料解答)
  • 常用LINUX配置及SHELL命令集锦-网络配置和系统管理操作
  • Google 是如何开发 Web 框架的
  • ES6系统学习----从Apollo Client看解构赋值
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • IDEA常用插件整理
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js中forEach回调同异步问题
  • Protobuf3语言指南
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 百度小程序遇到的问题
  • 高度不固定时垂直居中
  • 解析 Webpack中import、require、按需加载的执行过程
  • 驱动程序原理
  • 如何实现 font-size 的响应式
  • 十年未变!安全,谁之责?(下)
  • 算法-插入排序
  • 用element的upload组件实现多图片上传和压缩
  • 正则与JS中的正则
  • elasticsearch-head插件安装
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #include<初见C语言之指针(5)>
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (译) 函数式 JS #1:简介
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (轉)JSON.stringify 语法实例讲解
  • (状压dp)uva 10817 Headmaster's Headache
  • *p++,*(p++),*++p,(*p)++区别?
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitignore文件—git忽略文件
  • .net CHARTING图表控件下载地址