找到数组O(N)亲切性测试中重复元素之间的差异

时间:2015-04-03 13:00:04

标签: algorithm time-complexity

我已经通过了一项亲切的测试,要求我编写一个函数来查找重复元素之间的最大差异。 例如,如果我有N个元素的数组A [I] = K,其中K <= N

A[0]=1
A[1]=6
A[2]=1
A[3]=2
A[4]=3
A[5]=6
A[6]=2

这里是重复元素之间的最大差异是4(5-1 = 4),因为

A[1]=A[5] the difference =5-1=4
A[0]=A[2] the difference =2-0=2
A[3]=A[6] the difference =6-3=3

最大值是4

所以我应该编写一个返回4但时间复杂度为O(N)的方法

时间复杂度为O(N2)和O(NLogN)

时,我想到了解决方案

2 个答案:

答案 0 :(得分:3)

使用哈希表进行线性扫描。

在表格中存储元素的第一个匹配项。如果再次看到它,请计算差异并根据需要更新全局最大值。

注意:如果您知道元素的范围有限,您也可以使用数组。

答案 1 :(得分:0)

我过去做过类似的事情。

制作这个容器:

int max = 0;
map<int, list<int>>

您的想法是遍历列表并在看到地图时向地图添加值。该列表包含发现它们时元素的数组索引。

即6的地图应包含1-> 5。每次迭代,如果列表的大小&gt; 1,计算:curIndex - *--list.end() - O(1)。如果此值大于最大值,请更新最大值

所以O(N)迭代列表,O(1)检查列表的大小,O(1)计算新的最大值。 Max将包含答案。总体而言O(N)复杂度。