//tests 1111 |--|4 1011 |--|4 00 1001 ||2 ||2 0000 0000 ||2 ||2 ||2
(n):
maxcount1s = count1s = 0
count0s = 0
first0index = 0
i = 31
while i >= 0:
if bit(n, i) == 0:
count0s++
if count0s == 2:
if count1s > maxcount1s:
maxcount1s = count1s
count1s = count0s = 0
i = first0index -1
continue
else: // count0s == 1
first0index = i
count1s++
i--
if count1s > maxcount1s:
maxcount1s = count1s
return maxcount1s
bit(n, i):
return (n >> i) &1
[Hat tip to ctci]
No comments:
Post a Comment