代码在计算最大连续 1 时失败 4/9 案例,我该如何改进?

Posted

技术标签:

【中文标题】代码在计算最大连续 1 时失败 4/9 案例,我该如何改进?【英文标题】:Code fails 4/9 cases while counting maximum consecutive 1s, how can I improve this? 【发布时间】:2021-02-10 11:39:34 【问题描述】:

给定一个以 10 为底的整数,将其转换为二进制(以 2 为底)。然后找到并打印以 10 为底的整数,表示 ' 二进制表示中连续 ' 的最大数量。

我无法查看测试用例,这是 Hacker Rank 的问题,所以如果有人可以帮助我了解失败的情况,我的逻辑有什么问题以及如何改进它。

使用 map 的解决方案也提出了同样的问题,但我没有学到太多东西,所以我只使用了我所知道的 convert a given decimal number to binary and count the consecutive 1s and display it

问题:4/9 测试用例失败

我也不明白为什么这在这 4 种情况下有效,因为计数器(计数)没有重置为 0,值不应该继续加起来吗?如果是这样,我什么时候将其重置为 0 ?或者还有什么办法?

代码:

n = int(input())

# Get remainder
def get_rem(n):
    rem = n%2
    return rem
# Get the next value
def get_val(n):
    val = int(n/2)
    return val

# Convert decimal to binary
inp = n
bina = []
while inp != 0:
    new_rem = get_rem(inp)
    bina.append(new_rem)
    inp = get_val(inp)

# The binary value
binv = bina[::-1]


# Find maximum consecutive 1's
longest = 0
count = 0
for i in binv:
    if i == 1:
        count += 1
    else:
        if count > longest:
            longest = count

print(longest)

【问题讨论】:

您的转换代码至少在 n=0 时失败。您的计数代码计算所有 1,而不仅仅是连续的。遇到 0 时必须重置 cont。 @DYZ 我通过更改 else 语句来检查输入是否为 0 并重置计数器来解决它。 elif i == 0: count = 0 然后设置最长计数。 【参考方案1】:

将最后一部分改为

longest = 0
count = 0
for i in binv:
    if i == 1:
        count += 1
    elif i == 0:
        count = 0
    
    if count > longest:
        longest = count
    
print(longest)

为我工作

【讨论】:

以上是关于代码在计算最大连续 1 时失败 4/9 案例,我该如何改进?的主要内容,如果未能解决你的问题,请参考以下文章

当@before节中的代码失败时Junit将执行@Test案例吗?

数组代码和经典案例

计算收益最大回撤的思想和代码

FLinkFlink checkpoint 实现数据连续计算 恢复机制 拓扑图 变化 如何处理

写写代码系列013:剑指offer题目——连续子数组的最大和(动态规划)

在 IE 上获取图像加载时的图像宽度失败