今天早些时候我问过类似的问题,找到两个数组中常见的最大元素。我在这里得到了几个很好的解决方案(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的每个元素,跟踪最大元素(如果存在)所有的哈希图)?
我们能有更好的解决方案吗?
答案 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。