【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


相关内容

热门资讯

企业IP打造指南:小公司低成本... 小公司做企业IP,不是为了装门面,而是让客户在没见到你之前,就能通过内容知道你是谁、你解决什么问题、...
官方:赵心童入选世界斯诺克名人... 北京时间5月8日消息,世界斯诺克巡回赛(WST)今日正式公布了2025/26赛季年终奖项及名人堂更新...
小灰熊AI学员王锋:希望能跟上... 35了,老程序员了。 从进入互联网行业到现在,其实已经做了很多年移动端开发。最早那几年,安卓行业发展...
原创 2... 2026年全国两会把稳定房地产市场列为重点工作,政府工作报告明确提出因城施策控增量、去库存、优供给。...
一年翻倍,六年未归——徽商银行... 文:向善财经 今年的港股市场,与A股市场出现了明显的分化。 A股这边,科技板块在AI浪潮中热闹非凡;...
古井贡酒2025:在行业深度调... 以“稳”为底、以“新”为翼。 文/每日财报 杜康 在行业库存高企、价格倒挂的背景下,当多数酒企在为...
好上好8408万收购鼎瑞芯加码... 5月7日晚,好上好(001298.SZ)抛出一份收购公告,拟以8408万元现金收购深圳市鼎瑞芯科技有...
全面大撤离!李嘉诚英国“套现”... 突发,李嘉诚又卖了。 这次,套现了455亿。 金额不少,但更值得关注的是透露着不同寻常的信号。 因为...
油气价格上涨加剧法国一季度贸易... 据新华社,法国海关7日发布的数据显示,受中东局势推高国际油气价格影响,法国今年第一季度贸易逆差扩大至...
昆仑芯启动科创板IPO上市辅导... 5月8日,据证监会官网显示,昆仑芯(北京)科技股份有限公司于2026年5月7日正式启动科创板上市辅导...
贵州茅台酒股份有限公司关于回购... 来源:上海证券报 证券代码:600519 证券简称:贵州茅台 公告编号:临2026-016 贵州茅...
百度昆仑芯启动科创板上市辅导,... 5月8日,证监会官网显示,昆仑芯(北京)科技股份有限公司 (下称“昆仑芯”)于2026年5月7日正式...
滕州信华的承压时刻:罚单、失信... 2026年4月末,滕州信华美元债单日跌近2%,关联方被列“老赖”。半年前,这家AA+城投曾因非市场化...
002808,或被终止上市! 【导读】因触及财务类退市指标,*ST恒久或被终止上市 中国基金报记者 李智 又一A股或被终止上市。 ...
院士团队掌舵,溧阳这家企业已完... 近日,溧阳天目先导电池材料科技有限公司(下称“天目先导”)官宣完成B轮融资,投资方包括知卓创新资本、...
工商银行全新推出“工盈研选”品... 深圳商报·读创客户端记者 詹钰叶 近日,工商银行重磅推出「工盈研选」基金销售服务品牌,以客户盈利为核...
和讯信息胡云龙:逼空走势,周五... 今天市场出现逼空走势,场内投资者因持有筹码而尤为受益。五一前布局的投资者当前收获颇丰。然而,随着上证...
今晚,油价上调! 4月21日国内成品油价格下调以来,国际市场原油价格剧烈震荡,前期大幅上涨后近日有所回落,本次调价的前...
南方东英旗下两倍做多海力士,成... 【导读】南方东英旗下两倍做多海力士,成为全球最大的个股杠杆及反向产品 中国基金报记者 伊万 人工智能...
原创 金... 黄金,这东西从古至今就没离开过中国人的生活。从老辈人压箱底的小黄鱼,到如今年轻人结婚绕不开的“三金”...