Нахождение самого большого двоичного разрыва - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно найти двоичный пробел для целого числа.

Двоичный пробел внутри положительного целого числа N - это любая максимальная последовательность последовательных нулей, окруженная единицами на обоих концах в двоичном представлении N .

Например: N = 1041 двоичный: 10000010001 Результат: 5 (5 нулей в окружении единиц)

Ниже мой код, хотя bin_no [22] равен 1, но он никогда не попадает внутрь, если выписка.

def solution(N):
    bin_no = f'{N:32b}'
    print(len(bin_no))
    count = []

    for i in range(len(bin_no)):
        if bin_no[i] == 1:
            count[i] = 0
            j=i
            while(bin_no[j+1] != 1):
                count[i] +=1
                j +=1
            print (count[i])

print(solution(529))

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вы можете разделить нули с помощью «1» и получить группы нулей в виде списка. Найдите самый длинный и готово!

def solution(N):
    bin = f'{N:b}'  # for 32-bit representation with leading zeroes use f'{N:#032b}'
    splitted = bin.split('1')
    m = max(splitted, key=len)
    return len(m)

Итак, это выглядит так:

1041 -> '10000010001' -> ['', '00000', '000', ''] -> '00000' -> 5

Код можно легко изменить, чтобы игнорировать начальную и конечную группы нулей, если это ваш случай.

0 голосов
/ 29 мая 2020

использовать регулярное выражение:

def solution(N):
    bin_no = f'{N:b}'
    pt= r"10+(?=1)"
    mtchs = re. findall(pt, bin_no)
    print(bin_no)
    print(mtchs)
    mx = max(mtchs,key=len)
    return mx.count('0')

print(solution(401))

вывод:

110010001

['100', '1000']

3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...