题目
给定一个32位整数 num
,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112)
输出: 8
示例 2:
输入: num = 7(01112)
输出: 4
题解
java
public int reverseBits(int num) {
// 分别记录最大连续数量(包括从0变为1一次)、前一次连续1的数量、当前连续1的数量
int max = 0, previous = 0, count = 0;
while (num > 0) {
if ((num & 1) > 0) {
// 当前位为1
count++;
} else {
// 记录当前最大值为两段连续的1数量加上变为0的数量
max = Math.max(max, count + previous + 1);
// 记录前一段连续数量
previous = count;
// 重置当前连续1的数量
count = 0;
}
// 向右移位
num >>= 1;
}
// 比较当前最大值和最后一次连续1的数量
return Math.max(max, count + previous + 1);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22