【发布时间】:2020-05-20 01:46:20
【问题描述】:
我正在尝试完成题为“number_station_coded_messages”的 google foo.bar 2 级挑战。问题来了:
给定一个非空的正整数列表 l 和一个目标正整数 t,编写一个函数 answer(l, t) 来验证列表 l 中是否至少有一个连续的正整数序列(即一个连续的sub-list) 可以求和到给定的目标正整数 t(键),并返回包含可以找到此序列的最小开始和结束索引的字典最小列表,或返回数组 [-1, -1 ] 在没有这样的序列的情况下(为了摆脱 Lambda 的间谍,并非所有数字广播都包含编码消息)。
例如,给定广播列表 l 为 [4, 3, 5, 7, 8] 并且键 t 为 12,函数 answer(l, t) 将返回列表 [0, 2] 因为列表l 包含从索引 0 开始到索引 2 结束的子列表 [4, 3, 5],其中 4 + 3 + 5 = 12,即使在列表的后面有一个较短的序列 (5 + 7 )。另一方面,给定列表 l 为 [1, 2, 3, 4] 并且键 t 为 15,函数 answer(l, t) 将返回 [-1, -1] 因为没有子列表的列表 l 可以总结为给定的目标值 t = 15。 为了帮助您识别编码广播,Bunny HQ 同意以下标准:
- 每个列表 l 将包含至少 1 个元素,但不会超过 100 个。
- l 的每个元素都在 1 到 100 之间。
- t 为正整数,不超过 250。
- 列表 l 的第一个元素的索引为 0。
- 对于 answer(l, t) 返回的列表,开始索引必须等于或小于结束索引。
请记住,为了摆脱 Lambda 的间谍,Bunny HQ 可能包含多个可以汇总为密钥的数字广播的连续子列表。您知道消息将始终隐藏在与键相加的第一个子列表中,因此 answer(l, t) 应该只返回该子列表。
以下是我目前的解决方案。
def answer(l, t):
for index1, value1 in enumerate(l):
for index2, value2 in enumerate(l):
if sum(l[index1:index2]) == t:
return [index1, index2 -1]
return [-1, -1]
我能够通过 4/5 的测试用例,但我在测试 5 中失败了。我不确定它失败的原因是什么?我不一定要寻找解决方案,而是要寻找确实失败的测试用例!我找到了java solution,但遗憾的是,我对java一无所知!非常感谢任何帮助或提示!
【问题讨论】:
-
@StefanPochmann 解决方案效率低下会导致您无法通过某个测试用例吗?我不知道它是如何工作的。
-
是的,当然。效率很重要。
-
鉴于这是谷歌的自动招聘筛选,你认为这算作弊吗?
-
可能是作弊。不过,有很多人在这些挑战上寻求帮助。由于我不是从谷歌找工作,也无法找到工作,所以我不担心寻求帮助。
-
这种情况怎么样? "返回包含可以找到此序列的最小开始和结束索引的字典最小列表"