找到n个不同数组中常见的最大元素?

时间:2012-06-21 17:43:10

标签: algorithm

今天早些时候我问过类似的问题,找到两个数组中常见的最大元素。我在这里得到了几个很好的解决方案(Find the maximum element which is common in two arrays?)。

现在我想到了,如果不是两个数组,我们必须找到n个不同数组中常见的最大元素?

示例:

 array1 = [1,5,2,4,6,88,34]
 array2 = [1,5,6,2,34]
 array3 = [1,34]
 array4 = [7,99,34]

Here the maximum element which is common in all the arrays is 34.

最好分别创建array1,array2 ..... array(N-1)的hashmap,然后在每个hashmaps中检查arrayN的每个元素,跟踪最大元素(如果存在)所有的哈希图)?

我们能有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

For each array A_n:
  Add all elements in A_n to a hashset, H_n

Create a hashmap, M, which maps values to counts.
For each hashset H_n:
  For each value, v, in H_n:
    M[v]++

Go through M for the highest value with count == N

这将在O(n)时间和空间中运行,其中n是所有数组中元素的总数。它还可以正确处理在单个数组中复制的元素,您没有提及但这可能会导致某些算法出现问题。如果您知道单个阵列中没有重复元素,则可以跳过第一步并直接从数组中向M添加值。

答案 1 :(得分:0)

hashmap不适合跟踪max元素。你想要的是最大堆或hashset。

你创建n max heap并遍历其中的n个。你采取共同的最大元素。这可能很难实现。

另一种方法是找到所有集合的交集并从交叉点取最大值。在这种情况下,您可以使用hashset。