【发布时间】:2022-01-07 14:57:55
【问题描述】:
我必须找到列表中的第一个重复元素。假设我有一个列表[1, 2, 3, 4, 3, 1, 2, 9]。这里的第一个副本是3,因为当我们从从左到右遍历它时,2nd 3在2nd 1之前排在第一位strong> 和 2。
为了解决这个问题,我有两个解决方案。
使用集合
def firstDuplicateValue(array):
duplicate = set()
for value in array:
if value in duplicate:
return value
else:
duplicate.add(value)
return -1
使用字典
def firstDuplicateValue(array):
duplicate = {}
for value in array:
if value in duplicate:
return value
else:
duplicate[value] = True
return -1
在 python 中哪个更省时,为什么?还有其他最好的解决方案吗?
【问题讨论】:
-
@mama 字典不是无序的。他们的顺序在这里并不重要。
-
@rv.kvetch 显然,至少他们会这样做(我也是)。虽然我想看看你的
Counter解决方案(诚然只是指出这是错误的:-P)。 -
字典用于存储键:值对,这里不需要,所以在这种情况下,设置解决方案似乎更可取
-
请注意,
in对 set 和 dict 的测试都是常数时间 O(1),但是如果您只对键感兴趣,为什么要存储一个值呢? -
@rv.kvetch 哈...我终于找到了可能稍微快一点的东西,它涉及...一个计数器:-)(但可能不在你想到的方式,我仍然怀疑它不能正常工作)
标签: python dictionary data-structures set