【简单】HJ86 求最大连续bit数(Python 四种写法)

该文章是一个关于编程算法的问题,要求计算一个整数转换为二进制后,二进制串中连续1的最大数目。提供了四种不同的Python实现方法,包括直接遍历、除法、位运算以及分割字符串。所有方法都关注了时间复杂度为O(logn)和空间复杂度为O(1)的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1≤t≤5 1≤t≤5 ,1≤n≤500000 1≤n≤500000
进阶:时间复杂度:O(logn) O(logn) ,空间复杂度:O(1) O(1)
输入描述:

输入一个int类型数字
输出描述:

输出转成二进制之后连续1的个数
【代码】
【写法1】

import sys

for line in sys.stdin:
    bline=str(bin(int(line)))
    maxcnt=0
    cnt=0
    for item in bline:
        if item=="1":
            cnt+=1
        else:
            maxcnt=max(maxcnt,cnt)
            cnt=0
    print(max(maxcnt,cnt))

【写法2】

import sys

for line in sys.stdin:
    num=int(line)
    maxcnt=0
    cnt=0
    while num:
        if num%2==1:
            cnt+=1
        else:
            maxcnt=max(maxcnt,cnt)
            cnt=0
        num//=2
    print(max(maxcnt,cnt))

【写法3】位运算

import sys

for line in sys.stdin:
    num=int(line)
    maxcnt=0
    cnt=0
    while num:
        if num&1==1:
            cnt+=1
        else:
            maxcnt=max(maxcnt,cnt)
            cnt=0
        num>>=1
    print(max(maxcnt,cnt))

【写法4】

import sys

for line in sys.stdin:
    temp=str(bin(int(line.strip()))[2:])    
    temp=temp.split("0")
    maxcnt=0
    for item in temp:
        maxcnt=max(maxcnt,len(item))
    print(maxcnt)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值