如何解决是否可以不使用排序就创建“获取完全不重复的值”算法? 时间复杂度=> On
我想知道没有排序的“获取根本不重复的值”算法。
让我解释一下“获取完全不重复的值”
如果列表值为[1,3,2]
我想得到1、2
我尝试了很多算法。
但是我找不到时间稳定度稳定的算法为O(n)。
我尝试使用字典,队列。
但是,时间复杂度总是不稳定的O(n)
使用字典
li = [1,2,5]
li_dict = dict()
for i in range(len(li)):
try:
a = li_dict[li[i]]
li_dict[li[i]] = False
except KeyError:
li_dict[li[i]] = True
for k in li_dict.keys():
if li_dict[k]:
print(k,end="")
这可能吗?
如果可能的话,请说明如何使其成为可能。 (无排序)
解决方法
我为您提供了一个硬编码的解决方案。您可以使用Set类型:
li = [1,3,2]
result = set()
seen = set()
for i in li:
if i in seen:
result.discard(i)
else:
result.add(i)
seen.add(i)
print(result)
因为python集在引擎盖下使用哈希表技术,查找速度非常快,就像在字典中一样。但是,集合更适合您的问题,因为它们的行为更像列表。 在我的代码示例中,我仅对列表进行一次迭代,并且由于Set成员资格测试接近即时(O(1)),因此我认为这是O(n)的复杂性。
我用两套将我已经看过的物品与我想保留的物品分开。
最可能有更多的pythonic解决方案。这是我第一次尝试推断一段代码的复杂性,但是我相信我的结论是正确的。如果没有,其他人可能会纠正我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。