【发布时间】:2020-09-28 04:36:44
【问题描述】:
昨天我有幸受邀参加 Google Foobar 挑战。我正在接受第二个挑战,在处理它的前半小时内,我得到了我认为可行的解决方案。然而,它在一个隐藏的测试用例中失败了,尽管通过我所有的测试它工作正常而且我不知道问题可能是什么。
对于挑战,我要编写一个函数,给定一个列表“l”和一个整数“t”,确定 l 中的第一个连续子列表,其中该子列表中的数字加起来为“t”。该函数输出一个包含该子列表的开始和结束位置的列表。例如,给定列表 [4, 3, 5, 7, 8] 和 int 12,它将找到子列表 [4, 3, 5] 并输出 [0, 2]。如果不存在这样的子列表,则返回 [-1, -1]。
这是我想出的解决方案(使用 Python 2.7):
def solution(l, t):
for item in l:
index = l.index(item)
output = [index]
total = 0
while total < t and index < len(l):
total += l[index]
index += 1
if total == t:
output.append(index - 1)
return output
return [-1, -1]
这通过了 5 个测试用例中的 4 个,但我无法说明最后一个用例失败的原因。我已经能够通过严格的测试(大约 3 小时)确定该案例有一个长度为 100 的列表,并且列表中至少包含一个 100,这两个都是基于我给出的标准的最大数量可以输入。这些标准是:
- 每个列表 l 将包含至少 1 个元素,但不会超过 100 个。
- l 的每个元素都在 1 到 100 之间。
- t 为正整数,不超过 250。
- 列表 l 的第一个元素的索引为 0。
- 对于solution(l, t)返回的列表,起始索引必须等于或小于结束索引。
如果有人能想到该测试用例失败的原因,我将不胜感激。我不知道我是否能够完成整个挑战,但到目前为止我玩得很开心,真的不希望它这么快结束。发布后,我还有 2 天 15 小时来完成它。提前致谢!
【问题讨论】:
标签: python