【力扣面试】面试题 05.03. 翻转数位
题目
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(11011101111)
输出: 8
示例 2:
输入: num = 7(0111)
输出: 4
解题思路
思路:
1、求连续1的数量,如遇到0,则下标指针++
2、稍微思考一下,不难明白此时本题就转换为:数组中最大的相邻元素之和。
3、最后要防一手 -1 的情况,因为-1的二进制为32个1。直接返回即可
代码
class Solution {
public int reverseBits(int num) {
if (num==-1)
{
return 32;
}
String s = Integer.toBinaryString(num);
System.out.println(s);
int n = 0, max = 0;
int[] a = new int[32];
int f = 0;
//统计每一段连续1的数量
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1') {
a[n]++;
} else {
n++;
}
}
for (int i = 0; i < a.length - 1; i++) {
max = Math.max(max, a[i] + a[i + 1] + 1);
}
return max;
}
}