我有两个清单。我想找到两者中最小的共同数字。我想过使用HashSet,因为它不允许重复。我可以在向它添加两个列表元素时找出常用数字。并且HashSet仅需constant time
进行插入。这可以让我O(n)
找到两个最小的共同点。但是HashSet如何在n
中插入constant time
元素?在这种情况下,要添加最后一个元素需要O(n)
时间,因为要找到正确的存储桶,它必须在最坏的情况下将哈希码与n个存储桶进行比较。请更正此信息,并提前致谢..!
答案 0 :(得分:1)
算法看起来非常简单:
HashSet
的元素的A
。min
初始化为大型Integer.MAX_VALUE
。B
中的每个元素,请测试它是否在HashSet
中。如果是,并且小于min
,则更新min
。无论如何,哈希算法或多或少总是假设哈希实际上是一个很好的哈希函数,你不必担心O(n)最坏的情况。
答案 1 :(得分:0)
查找存储桶是固定时间 - 它只取决于给定对象的哈希值,而不是现有对象。
答案 2 :(得分:0)
您可以在任何算法手册中找到答案(例如Corman,Knuth)。 简而言之:bucketIndex = toPositiveInteger(hashcode())%buckets.length