我有几个整数数组。每个数组中的元素都是有序的。数组没有重复项。
我需要将所有数组合并为一个,以便生成的数组仅包含每个数组中存在的元素。
例如,我有数组
(1,2,3,4,5) (2,3,5) (1,2,4,5)
结果必须是 (2,5)
实现最佳性能的最佳方法是什么?
我有几个整数数组。每个数组中的元素都是有序的。数组没有重复项。
我需要将所有数组合并为一个,以便生成的数组仅包含每个数组中存在的元素。
例如,我有数组
(1,2,3,4,5) (2,3,5) (1,2,4,5)
结果必须是 (2,5)
实现最佳性能的最佳方法是什么?
如果期望数组包含许多不同的数字并且所有数字中只有少数,
length(intersection)*log(length(array)) >= length(array)
查找交集的元素。array
最坏情况的复杂度是 O(sum(lengths)),如果幸运的话,你可以绕过k * sum(log(length))
,其中k
是交叉点中元素的数量。
这应该有效:
如果数组可以包含多个数字的实例,这也应该有效,例如数组 (1,1,2,2),(2,2,3,3) 将导致 (2,2)。
这就是我的想法:创造一个HashMap<Integer, Integer>
它会是什么样子numer->hits
;遍历所有数组:
毕竟你将拥有,数字->计数
1->1
2->3
3->2
4->2
5->3
所以你再次遍历 HashMap 并打印 if(value==arrays.lenth)
所以空间是 O(N) 和 O(N) 步。
注意 hashmap 的访问是恒定的时间(yahoooooo)。