【发布时间】:2018-10-15 05:44:06
【问题描述】:
给定一个未排序的数字列表(可以是 int 或 double),给出算法以在一次遍历列表和线性时间内找到非重复元素的最小值。 (不限空间)
例如
Given list is [2, 7, 9, 5, 2, 8, 3, 5, 1, 5, 6, 1]
Non-repeating elements are [7, 9, 8, 3, 6]
Min non-repeating element is 3
我通过创建两个哈希集来尝试这个,一个存储非重复元素,另一个存储重复元素,以及一个变量来存储非重复哈希集的最小值。在少数情况下,这可以给我线性时间,但不是全部。
提前致谢。
【问题讨论】:
-
它应该为您提供所有情况下的线性复杂性。你能展示你的代码吗?
-
产生意外结果的特殊情况是什么?列表中的元素是否有任何限制?
-
这里的不是线性的,是指链表不止一次的遍历吗?
-
在到达列表末尾之前,您无法知道某个项目是否重复。因此,您不能同时使用一个变量来保存非重复项的最小值,因为在任何时候,都可能证明您的最小值毕竟是重复项。
-
^ 没错。即使您尝试维护第二个变量来保存 second_minimum,即使这样也可以重复。必须有一些聪明的方法来做到这一点