forked from shuboc/LeetCode-2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
binary-gap.py
57 lines (55 loc) · 1.28 KB
/
binary-gap.py
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
# Time: O(logn) = O(1) due to n is a 32-bit number
# Space: O(1)
# 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
class Solution(object):
def binaryGap(self, N):
"""
:type N: int
:rtype: int
"""
result = 0
last = None
for i in xrange(32):
if (N >> i) & 1:
if last is not None:
result = max(result, i-last)
last = i
return result