【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


相关内容

热门资讯

在大吉订购APP订购交易亏损被...   近期,不少投资者反映在“大吉订购App”上投资白银、铂金等商品遭遇严重亏损。该平台宣称提供现货订...
铂银壹号APP商品订购交易亏损...   许多中小投资者误以为网上的“商品现货订购”是合规合法的理财渠道,殊不知这背后隐藏着巨大的合规风险...
兴鑫淘金APP贵金属订购交易亏...   白银、贵金属或其他商品类投资,除国家批准的正规期货交易场所及持牌期货公司外,市面上大量第三方交易...
铂银掘金APP无资质的违规平台...   铂银掘金等平台的投资者,往往是被“注册送现金”“充值返现券”“首单免亏”等广告话术吸引,进而下载...
八方淘金APP订购交易不合规,...   “八方淘金APP”“铂银掘金APP”“铂银壹号APP”等软件被指以“现货订购”为名,实际采用高杠...
在指尖订购APP订购商品亏损被...   指尖订购APP这类平台,表面是“订购交易”,实则是披着电商外衣的非法期货陷阱。绝大多数投资者被蒙...
在犀贝易购APP做商品订购交易...   市面上打着“现货投资”“贵金属交易”旗号的APP并不少,但真正合规、受监管的平台并不多。犀贝易购...
易达淘金APP虚假商品订购交易...   易达淘金APP存在严重的虚假宣传与违规交易行为。该平台打着“商品订购”的旗号,实则通过不合规的交...
大浪淘金APP白银订购亏损被骗...   大浪淘金APP最隐蔽的套路,在于其完全封闭的内盘交易系统。表面上,它宣称与国际贵金属市场接轨;实...
一品好购APP上订购白银出现亏...   一品好购APP原名“一品订购”,运营方为上海宝智未来信息技术有限公司。近期不少投资者反映在该平台...
九州订购APP贵金属订购投资骗...   九州订购APP正通过抖.音、快手、今日头条等平台大量投放投资广告,用“5元起投”“充值返现”“0...
坚锅淘金APP交易软件并不正规...   当前,市面上大量所谓的“现货商城订购”交易软件,早已偏离了正常的实物商品买卖,演变为高杠杆、高手...
斗金订购APP贵金属期货交易骗...   斗金订购APP的投资者往往被铺天盖地的广告宣传所诱导——注册即送现金、充值返现券等看似诱人的福利...
警惕!云启购APP违规经营,披...   "5元起投、充值返现、稳赚不赔"——这些诱人的广告语背后,可能是一个精心设计的金融陷阱。  近期...
量子淘金APP贵金属投资不合规...   "4元起投""充值返券""月入过万"——这些极具诱惑力的广告语在短视频平台、社交软件上铺天盖地。...
鑫汇智投APP贵金属商品订购骗...   鑫汇智投APP非法期货投资骗局,受害者在投资过程中根本不懂交易,也不去研究和验证这个平台是否正规...
矅光智策APP平台违规经营非法...   矅光智策APP对外宣称是“商城订购”“现货交易”,但查询其经营范围,并未显示具备开展现货期货交易...
黄金珠宝怎么选?内侧刻字都代表... 潮新闻客户端 记者 马焱 通讯员 任倩影 9月8日下午,“云游杭州 乐购金秋”——“浙城·浙放心”活...
原创 冰... 最近全球国债市场正在上演魔幻一幕: 美债、日债、欧债遭遇猛烈抛售,收益率冲到几十年新高,美国财政部都...
日韩股市开盘表现分化 上证报中国证券网讯 9月9日,日韩股市开盘表现分化,韩国综合指数开盘上涨0.26%,报6972.87...