Algorithm 高效查找高密度区间的最佳数据结构
我有一组未排序的整数和一个区间长度。我需要找到给定区间中包含的元素的最大子集 例1:Algorithm 高效查找高密度区间的最佳数据结构,algorithm,search,optimization,data-structures,Algorithm,Search,Optimization,Data Structures,我有一组未排序的整数和一个区间长度。我需要找到给定区间中包含的元素的最大子集 例1: Set: [11, 1, 2, 100, 12, 14, 99] Interval: 4 Result: [11, 12, 14] 例2: Set: [1, 100, 55, 2, 88, 3] Interval: 10 Result: [1, 2, 3] 实际上,集合中还有更多的元素 解决这个问题的有效数据结构和算法是什么 将整数集排序为数组A,并将w设为间隔的宽度 初始化i=j=best\u
Set: [11, 1, 2, 100, 12, 14, 99]
Interval: 4
Result: [11, 12, 14]
例2:
Set: [1, 100, 55, 2, 88, 3]
Interval: 10
Result: [1, 2, 3]
实际上,集合中还有更多的元素
解决这个问题的有效数据结构和算法是什么
A
,并将w
设为间隔的宽度
i=j=best\u start=best\u n=0
A[j]
(或best\u n
设置best\u start=i
和best\u n=j-i
,则增量j
i=i+1
如果i,j
返回到2
总复杂度由初始排序复杂度O(n logn)决定。排序后,请注意复杂度必须是线性的,因为
j
只能增加,并且我们在每一步都会进行常量排序。您应该首先对数组进行排序(O(n)*log(n)),然后从开始遍历数组并保持间隔。如果当前数超过间隔,则存储该数组。如果发现较大的子集,则可以更新存储
该算法的时间复杂度为O(N)*log(N)+O(N),大约为2*O(N)。空间复杂度为O(N)。通过最大子集,您指的是子集的长度或子集的元素之和…?@YashShah集合的大小几乎总是指其基数。在示例中,您也可以排除元素之和,因为
[1,2,3]
是一个结果,而[100]
则会更好。我指的是元素数量最多的集合