外观
找出数字中二进制位连续出现的 1 或者 0 最多的次数
⭐ 题目日期:
华为 - 2024/11/2
🌳 题目描述:
输出一个数字中二进制位连续出现的 1 或者 0 最多的次数
示例 1:
输入:8
输出:3
解释:8 的二进制数为 1 0 0 0, 连续 1 的次数为 1,连续 0 的次数为 3,返回 3
示例 2:
输入:15
输出:4
解释:15 的二进制数为 1 1 1 1, 连续 1 的次数为 4,连续 0 的次数为 0,返回 4
🕵🏽 面试评估:
这道题主要考查对二进制的理解,以及最长重复出现的数的统计方法。易错点:1. 将整数转化成二进制数。2. 合适的时机更新最长 0 和 最长 1
🧗难度系数:
⭐️ ⭐️ ⭐️
📝思路分析:
先将数字转化成二进制字符串,如 1 0 0 1 1 1 0 0,再用两个计数器分别统计当前连续的 0 1 出现的次数。
具体操作步骤:
当 char = '1', countOnes++, countZeros = 0, 更新最长连续 1
当 char = '0', countZeros++, countOnes = 0,更新最长连续 0
💻代码:
Java
public int maxConsecutiveBits(int n) {
String binaryString = Integer.toBinaryString(n);
int maxOnes = 0;
int maxZeros = 0;
int countOnes = 0;
int countZeros = 0;
for (int i = 0; i < binaryString.length(); i++) {
char c = binaryString.charAt(i);
if (c == '1') {
countOnes++;
countZeros = 0;
if (countOnes > maxOnes) {
maxOnes = countOnes;
}
} else {
countZeros++;
countOnes = 0;
if (countZeros > maxZeros) {
maxZeros = countZeros;
}
}
}
return Math.max(maxOnes, maxZeros);
}
🚵🏻复杂度分析:
时间复杂度: O(1), 32 位 2 进制能表示任意的整数
空间复杂度: O(1)