华为机试-086-简单-HJ86.求最大连续bit数
一、描述
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数: 1 ≤ t ≤ 5 , 1 ≤ n ≤ 500000
进阶:时间复杂度:O(logn) ,空间复杂度:O(1)
1.1、输入描述
输入一个int类型数字
1.2、输出描述
输出转成二进制之后连续1的个数
二、示例
2.1、示例1
输入:
200
输出:
2
说明:
200的二进制表示是11001000,最多有2个连续的1。
三、答案(java)
3.1、方法一
用函数转换二进制后,直接用0进行split,然后找到最大长度。
package com.tzq.hwod;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int num = scanner.nextInt();
// 转二进制
String binaryStr = Integer.toBinaryString(num);
// 用0 分割
String[] strArray = binaryStr.split("0");
// 字符串长度
int result = 0;
for (int i = 0; i < strArray.length; i++) {
if (strArray[i].length() > result) {
result = strArray[i].length();
}
}
System.out.println(result);
}
}
}
四、答案(python 3)
4.1、方法一
split()一下之后用下set去掉多个分割出来的空值排个序就好了吧
#!/usr/bin/python
# -*- coding: UTF-8 -*-
while True:
try:
x = int(input())
byte_x = bin(x)[2:]
list1 = sorted(list(set(byte_x.split('0'))), key = lambda x: len(x), reverse=True)
print(len(list1[0]))
except:
break