使用HashSet作为整数

时间:2012-07-11 13:33:39

标签: java

我有两个清单。我想找到两者中最小的共同数字。我想过使用HashSet,因为它不允许重复。我可以在向它添加两个列表元素时找出常用数字。并且HashSet仅需constant time进行插入。这可以让我O(n)找到两个最小的共同点。但是HashSet如何在n中插入constant time元素?在这种情况下,要添加最后一个元素需要O(n)时间,因为要找到正确的存储桶,它必须在最坏的情况下将哈希码与n个存储桶进行比较。请更正此信息,并提前致谢..!

3 个答案:

答案 0 :(得分:1)

算法看起来非常简单:

  1. 构建包含列表HashSet的元素的A
  2. min初始化为大型Integer.MAX_VALUE
  3. 对于B中的每个元素,请测试它是否在HashSet中。如果是,并且小于min,则更新min
  4. 无论如何,哈希算法或多或少总是假设哈希实际上是一个很好的哈希函数,你不必担心O(n)最坏的情况。

答案 1 :(得分:0)

查找存储桶是固定时间 - 它只取决于给定对象的哈希值,而不是现有对象。

答案 2 :(得分:0)

您可以在任何算法手册中找到答案(例如Corman,Knuth)。 简而言之:bucketIndex = toPositiveInteger(hashcode())%buckets.length