Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathBinary Gap.java
More file actions
Latest commit
executable file
·77 lines (62 loc) · 1.51 KB
/
Copy pathBinary Gap.java
File metadata and controls
executable file
·77 lines (62 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
E
1531623482
tags: BitManipulation
time: O(n), n = # ofbits
space: O(1)
#### BitManipulation
- 理解BinaryGap的描述
- 简单的 `>>`, `&1`, trackstartandendpoint就好了
```
/*
Given a positive integer N, find and return the longest distance
between two consecutive 1's in the binary representation of N.
If there aren't two consecutive 1's, return 0.
Example 1:
Input: 22
Output: 2
Explanation:
22 in binary is 0b10110.
In the binary representation of 22, there are three ones, and two consecutive pairs of 1's.
The first consecutive pair of 1's have distance 2.
The second consecutive pair of 1's have distance 1.
The answer is the largest of these two distances, which is 2.
Example 2:
Input: 5
Output: 2
Explanation:
5 in binary is 0b101.
Example 3:
Input: 6
Output: 1
Explanation:
6 in binary is 0b110.
Example 4:
Input: 8
Output: 0
Explanation:
8 in binary is 0b1000.
There aren't any consecutive pairs of 1's in the binary representation of 8, so we return 0.
Note:
1 <= N <= 10^9
*/
classSolution {
publicintbinaryGap(intN) {
if (N <= 0) return0;
// mark start, end, max
intmax = 0, start = -1, end = 0;
// iterate until N is over
while (N > 0) {
if ((N & 1) == 1) {
if (start == -1) start = end;
else {
max = Math.max(max, end - start);
start = end;
}
}
end++;
N = N >> 1;
}
returnmax;
}
}
```