Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理二进制间隔最长的位操作?_Python - Fatal编程技术网

Python 如何处理二进制间隔最长的位操作?

Python 如何处理二进制间隔最长的位操作?,python,Python,我读了一点,发现这个问题很严重 def solution(N): max_gap = 0 new_gap = 0 for i in range(N.bit_length()): if N & (1 << i): if new_gap > max_gap: max_gap = new_gap new_gap =0 else:

我读了一点,发现这个问题很严重

def solution(N):
    max_gap = 0
    new_gap = 0
    for i in range(N.bit_length()):
        if N & (1 << i):
            if new_gap > max_gap:
                max_gap = new_gap
            new_gap =0
        else:
            new_gap += 1
    if new_gap > max_gap:
        max_gap = new_gap
    return max_gap 
def溶液(N):
最大间隙=0
新差距=0
对于范围内的i(N.位长度()):
如果N和(1)最大间隙:
最大间隙=新间隙
新差距=0
其他:
新的间隙+=1
如果新间隙>最大间隙:
最大间隙=新间隙
返回最大间隙
问题是它给出了错误的解决方案 (5而不是0)或64。
如何解决这个问题?

我标记了
new\u gap=-1
,直到我们遇到实际的位1

def solution(N):
    max_gap = 0
    new_gap = -1
    for i in range(N.bit_length()):
        if N & (1 << i):
            if new_gap > max_gap:
                max_gap = new_gap
            new_gap = 0
        elif new_gap >= 0:
            new_gap += 1
    if new_gap > max_gap:
        max_gap = new_gap
    return max_gap 

# test
for i in range(1,33):
    print(i, solution2(i))

以下是此问题的解决方案:

import pandas as pd

def getlargestgap(x):
  df = pd.DataFrame(list(map(list, bin(x)[2:])), columns=['A'])
  df['B'] = df.groupby(df.A.ne(df.A.shift()).cumsum()).cumcount()+1 
  df['Truth'] = df['A'] == '0'
  return df.loc[df['Truth'] == True]['B'].max() 

getlargestgap(23432124)

# 4

使用PyCharm作为您的IDE并学习使用调试器。逐行检查代码,检查变量的值,答案将是显而易见的。像这样的问题您不需要我们-只需要调试器:-)你所链接的问题中的一些答案解决了这个问题,这是因为你从第一位开始计数,即使它是零。只有遇到1时才需要开始计数。我真的很惊讶这会得到如此高的投票率,只是一段带有“为什么这不起作用”的代码,还有一个指向答案的链接…@RichardRublev是的,社区版非常优秀,甚至可以免费用于商业用途。我使用过付费/专业版,但即使是我工作的大多数公司也只使用社区版,而且它非常好。bin代表什么?它将数字转换为二进制字符串
import pandas as pd

def getlargestgap(x):
  df = pd.DataFrame(list(map(list, bin(x)[2:])), columns=['A'])
  df['B'] = df.groupby(df.A.ne(df.A.shift()).cumsum()).cumcount()+1 
  df['Truth'] = df['A'] == '0'
  return df.loc[df['Truth'] == True]['B'].max() 

getlargestgap(23432124)

# 4