欢迎来到小猪的博客,希望能帮到你!
前言
如果哪里解析错误或者你不太理解的都可以私聊我哈!谢谢~
一,题目
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000
进阶:时间复杂度:O(logn)\O(logn) ,空间复杂度:O(1)\O(1)
二,解析
根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计数。
三,代码
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int n = scanner.nextInt();
int count =0;
int modCount = 0;
while (n!=0){
if ((n&1)==1){
count++;
modCount=Math.max(count,modCount);
}else {
count=0;
}
n>>=1;
}
System.out.println(modCount);
}
}
}
这期博客的练习题分享就到这里了,希望对你有帮助!
记得关注小猪哦!小猪带你一起学习~
那咱们下期再见啦!