【题目】
求一个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的最大数目。提供了四种不同的Python实现方法,包括直接遍历、除法、位运算以及分割字符串。所有方法都关注了时间复杂度为O(logn)和空间复杂度为O(1)的要求。
347

被折叠的 条评论
为什么被折叠?



