【Java版oj】day11最近公共祖先、求最大连续bit数
创始人
2025-05-29 15:43:19
0

目录

 一、最近公共祖先

(1)原题再现

(2)问题分析

(3)完整代码

 二、求最大连续bit数

(1)原题再现

(2)问题分析

(3)完整代码


 一、最近公共祖先

(1)原题再现

最近公共祖先_牛客题霸_牛客网

描述

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

测试样例:

2,3

返回:1

(2)问题分析

        本题只是一道入门题,看似与树有关,其实只是简单的数学运算。对于二叉树父节点和子节点有一个关系:

若i>0,双亲序号:gif.latex?%5Cfrac%7Bi-1%7D%7B2%7D;i=0,i为根结点编号,无双亲结点
gif.latex?2i+1,否则无左孩子
gif.latex?2i+2,否则无右孩子

        根据这样的关系,只需要将两个孩子结点不断除以2,直到两数相等时,就是两个数的最近公共祖先。

2235faa69b064b77b33094d1b7631bcc.png

(3)完整代码

import java.util.*;public class LCA {public int getLCA(int a, int b) {// write code herewhile (a != b) {if (a < b) {b = b / 2;} else {a = a / 2;}}return a;}
}

2bb3fbbea94749e0b12309cf5d515ac2.png

 二、求最大连续bit数

(1)原题再现

求最大连续bit数_牛客题霸_牛客网

描述

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

输入描述:

输入一个int类型数字

输出描述:

输出转成二进制之后连续1的个数

示例1

输入:

200

输出:

2

(2)问题分析

        这道题很明显是一道动态规划的题。跟求解最长子序列类似。

        首先需要将十进制转化成二进制,并将二进制结果保存下来,我这里使用的是栈存储,可以保证得到的二进制顺序与实际的一致,其实也可以用StringBuffer类存储,无所谓顺序。得到二进制数的方法是,将该数不断除以2,得到余数,知道除数为0。

a1b4ca54e8c54e41a8b1fda975e14c22.png

        其次求求解连续1的最长序列 ,使用动态规划的思想。

状态:
子状态:F(i): 从0到i的连续一的个数
状态递推:

        如果当前下标位置为i的值为1时,连续1的个数就加一
              F(i) = F(i-1)+1

        如果当前下标位置为i的值为0时,连续1的个数就变为0

              F(i) = 0
初始化: 
              F(0) = 0(最开始是连续1的个数为0)
返回结果:右下角
              F(length)(数组长度)

每进行一次状态递推,就判断一次最大值和当前状态连续1的个数谁更大。

(3)完整代码

import java.util.*;
public class Main {public static void main(String[] args) {Deque stack = new LinkedList<>();//定义的栈存储二进制数Scanner sc = new Scanner(System.in);int num = sc.nextInt();stack = translate(stack, num);System.out.println(continueMax(stack));}public static Deque translate(Deque stack, int num) {//十进制转二进制int ans = 0;while (num != 0) {int tmp = num % 2;stack.push(tmp);//将余数压入栈中num /= 2;}return stack;}public static int continueMax(Deque stack) {int length = stack.size();int []oneSize = new int[length + 1];//长度是二进制数的个数+1,第0号位置用来初始化oneSize[0] = 0;int ans = oneSize[0];//定义初始连续1的最大数为0for (int i = 1; i <= length; i++) {//从第1号位置开始将二进制比特数出栈int tmp = stack.pop();//出栈,删除栈顶元素,并将栈顶元素的值赋给tmpif (tmp == 1) {//判断连续1的个数oneSize[i] = oneSize[i - 1] + 1;} else {oneSize[i] = 0;}ans = Math.max(ans, oneSize[i]);//每进行一次二进制数的出栈,就将现阶段连续1的个数与最大值比较}return ans;}
}

96d70111310a44ae8902d013409c2760.png

3ea9e174341b4b8daa7de7031662a6f8.png


相关内容

热门资讯

银行、消金公司助贷余额增速不得... 近日,中国证券报记者从多位业内人士处独家获悉,5月以来,多地金融监管部门对部分中小银行、消金公司下达...
朱鸿接任陈航,担任钉钉科技有限... 消费日报-今朝新闻讯 天眼查显示,6月23日,钉钉科技有限公司发生工商变更,陈航卸任法定代表人、董事...
3日累跌超20%,德创环保:公... 6月25日, 德创环保(603177.SH)公告,公司股票于2026年6月23日、6月24日和6月2...
北京发布2026年第七轮拟供商... 央广网北京6月25日消息(记者门庭婷)6月25日,北京市规划和自然资源委员会网站发布了2026年第七...
开放麦 | 启明创投胡奇:从A... “2026年,创投圈的浪潮再次翻涌:AI从技术概念走进产业深水区,硬科技创业从“小众赛道” 变成“主...
腾讯孙忠怀:在行业转身处 6月24日,2026腾讯视频年度发布在上海举行。腾讯公司副总裁、腾讯在线视频董事长孙忠怀以《在行业转...
加息,突变!美联储,重磅传来!... 美联储政策路径突生变数。 美国商务部经济分析局最新公布的数据显示,5月个人消费支出(PCE)物价指数...
6月合肥上门收金必看!5步避坑... 2026年6月,合肥黄金市场持续高位运行,不少市民翻出家里闲置的旧金饰、投资金条想变现,上门回收因为...
潮汕女富豪挂帅后加码液冷!祥鑫... 潮汕女强人,带着百亿公司加码液冷散热。 6月24日晚间,祥鑫科技(002965.SZ)公告称,公司董...
马斯克向太空要电,GobiX ... 一场关于「去哪里找电」的全球竞赛,正在朝两个方向展开。 作者|周永亮 编辑| 郑玄 「太空光伏是不是...
原料药行业陷入周期低谷 有药企... 每经记者|许立波 每经编辑|魏文艺 “过完年到现在,我们整个团队每个月都在出差,跑遍了亚非拉、欧美市...
家门口筛查白内障!永顺泽家镇暖... 大众卫生报·新湖南客户端6月25日讯(通讯员 彭雪姣)为切实解决辖区老年性白内障患者异地就医奔波、就...
终于等到!油价马上再大跌,这个... 点击添加图片描述(最多60个字) 编辑 各位车主朋友,好消息接二连三! 继6月18日油价大幅下调...
丈量出海新路 世界酒庄影响力指... 长期以来,全球酒庄评价体系由西方机构主导,且大多局限于单一酒种、单一评价维度,这一局面正逐渐被打破。...
峰瑞资本创始合伙人李丰:从资本... “2026年,创投圈的浪潮再次翻涌:AI从技术概念走进产业深水区,硬科技创业从“小众赛道” 变成“主...
原创 A... 迈向成熟,还有茁壮成长的机会。 作者 | 方璐 编辑丨于婞 来源 | 野马财经 2026年6月21日...
为企业解锁出海新通道!亚太中小... 6月24日下午,作为2026年APEC中小企业工商论坛的重要组成部分,亚太中小企业国际化合作发展论坛...
君赛生物港股IPO,增聘兴证国... 跟丰宜科技一样,正冲刺港股IPO的上海君赛生物股份有限公司(简称“君赛生物”)增聘一位整体协调人。 ...
圣邦股份明日上市:暗盘涨24%... 雷递网 雷建平 6月25日 圣邦微电子(北京)股份有限公司(简称:“圣邦股份”,股票代码:“0366...
科技“吃肉”,券商跟着“喝汤”... 当科技持续成为市场核心主线,押中硬科技项目的券商也成为被追逐的焦点。 6月24日,半导体零部件概念股...