题解 | #求最大连续bit数#

求最大连续bit数

https://www.nowcoder.com/practice/4b1658fd8ffb4217bc3b7e85a38cfaf2

采用按位操作一个 while 循环解决问题。但是要注意特殊情况 num = 1 时的处理 ~

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        // 最大连续数
        int max = 0;
        // 计数器
        int count = 0;

        while(num > 0){
            /*
                这里有个坑点,就是数字 3 这种,二进制表示是 11
                8 4 2 1
                -----------
                0 0 1 1 = 3

                在进行循环的时候,因为如果向右移位后变为了 1 ,就无法再计数了
                所以要对 1 的时候做一个特殊处理。

                小弟不才只能想到这种 low 办法了...

                如果 num == 1,说明是最后一位了,需要判断以下计数器是否大于 0
                如果大于 0 说明还在连续状态上,则计数器加 1,count++
                否则则不是连续的状态(因为如果中间断开,count会置为0)
                不连续状态就直接把 count 置为 1,再去和 max 比较取大值
            */
            if(num == 1) {
                if(count > 0) {
                    count ++;
                } else {
                    count = 1;
                }
                if(count > max) {
                    max = count;
                }
            }
            // 如果当前 num 和 1 进行按位与操作得 1,说明此位置是 1,计数器累加
            // 否则就要判断当前这个 count 和 max 比较,谁大取谁,注意要把计数器清空为 0
            if((num & 1) == 1) {
                count ++ ;
            } else {
                if(count > 0) {
                    if (count > max) {
                        max = count;
                    }
                    count = 0;
                }
            }
            // 无符号右移 1 位
            num = num >>> 1;
        }
        System.out.println(max);
    }
}

全部评论

相关推荐

刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
爱喝雪碧:我也投了这家,他最后两行我不懂,问什么意思,不回复我了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务