Day11:算法强训(最近公共祖先+求最大连续bit数)java+代码注释

本文探讨了两个算法问题,一是如何找到树中两个节点的最近公共祖先,另一个是如何求解一个整数中最大的连续1的个数。详细解题思路和Java代码实现附带注释,帮助理解算法实现过程。
摘要由CSDN通过智能技术生成

1.最近公共祖先

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

/**
     * 最近公共祖先
     * 满二叉树  parent = a/2 &b/2
     * 1.a=b 返回a
     * 2.a!=b ,大的那个数再/2 直到 a=b
     */
    public int getLCA(int a, int b) {
        // write code here
        while(a!=b){
            if(a > b){
                  a/=2;
            }else {
                  b/=2;
            }
        }
        return a;
    }

2.求最大连续bit数

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

 /**
     * 求最大连续bit数
     * 1.用位运算转二进制 &  >> 右移一位 直到右移完 为0 时 输出存储最大值
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int count = 0;
            int modCount = 0;
            while(n!= 0){
                //3 -> 1011  101 10 1
                // 0&1 =0   1&1 = 1 (&与运算:右移一位是否为1)连续则相加 否则为0
                if((n&1)==1){
                    count ++;
                    modCount = Math.max(count,modCount);
                }else {
                    count = 0;
                }
                //右移一位
                n >>= 1;
            }
            System.out.println(modCount);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值