我有很少的整数数组。每个数组中的元素都是有序的。数组没有重复项。
我需要将所有数组合并为一个,因此结果数组只包含每个数组中存在的元素。
例如,我有数组
(1,2,3,4,5) (2,3,5) (1,2,4,5)
结果必须是(2,5)
实现最佳性能的最佳方法是什么?
答案 0 :(得分:9)
如果预期数组包含许多不同的数字,并且所有数字中只有少数存在,
length(intersection)*log(length(array)) >= length(array)
计算其与先前处理的阵列的交集的交点,并查找交叉点的元素否则array
。最坏的情况复杂度是O(总和(长度)),如果你很幸运,你可以绕过k * sum(log(length))
,其中k
是交集中元素的数量。
答案 1 :(得分:4)
这应该有效:
如果数组可以包含多个数字实例,例如,这也应该有效。数组(1,1,2,2),(2,2,3,3)将导致(2,2)。
答案 2 :(得分:2)
这就是我的想法:
创建一个HashMap<Integer, Integer>
就像numer->hits
;
迭代所有数组:
毕竟你将拥有,number-&gt; count
1->1
2->3
3->2
4->2
5->3
所以你再次遍历HashMap并打印if(value == arrays.lenth)
所以空间是O(N)和O(N)步。
注意hashmap的访问是常量时间(yahoooooo)。