【发布时间】:2022-07-16 21:59:41
【问题描述】:
感谢您抽出宝贵时间回答一个非常简单的问题。我最近遇到了一个编码挑战,在优化之后,我做了一个算法,我确信它不起作用,但找不到破坏它的测试用例。比我更有经验的人可以给我一个不起作用的测试用例吗?你还能验证算法是 O(n) 时间和 O(1) 空间复杂度吗?这就是问题所在。
挑战:
编写一个从整数数组返回重复整数的算法。该数组的构造使得每个整数都大于 1(含)且小于数组的长度(不含)。
输入:
一个大小为 N 的整数数组,其中每个整数 x 都遵循规则 1
输出:
在输入中重复的整数。
示例:
输入:[1, 2, 3, 1]
输出:1
输入:[2, 3, 4, 2, 4]
输出:2 或 4
不应该工作的算法:
def find_duplicates(arr):
curr_n = arr[0]
while True:
removed_n = arr[curr_n]
if removed_n == curr_n:
return curr_n
arr[curr_n] = curr_n
curr_n = removed_n
【问题讨论】:
-
你确定有反例吗?我尝试随机生成一百万个测试输入,但我找不到任何没有给出正确答案的输入。
-
具体是什么测试用例失败了呢?代码似乎可以工作,虽然有点混乱(为什么不使用 set?)
-
@NickODell 我实际上不确定。我们在面试过程中花了一两分钟试图提出一个反测试。我根本找不到,所以我认为我的逻辑可能存在一些缺陷,但似乎并非如此......
-
@EricJin 一开始我使用的是 dict,但面试官希望在保持 O(n) 时间复杂度的同时降低空间复杂度。所以我们结束了一起破解这段代码。