代码在计算最大连续 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 实现数据连续计算 恢复机制 拓扑图 变化 如何处理