我已经通过了一项亲切的测试,要求我编写一个函数来查找重复元素之间的最大差异。 例如,如果我有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)
时,我想到了解决方案答案 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)复杂度。