【问题标题】:Best data structure to efficiently find high density interval有效找到高密度区间的最佳数据结构
【发布时间】:2020-11-22 14:08:04
【问题描述】:

我有一组未排序的整数和一个区间长度。我需要找到给定区间中包含的最大元素子集

示例 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]

实际上,集合中有更多的元素

解决这个问题的有效数据结构和算法是什么?

【问题讨论】:

  • 最大子集是指子集的长度或子集元素的总和...?
  • @YashShah 集合的大小几乎总是指其基数。在示例中,您还可以排除元素的总和,因为 [1, 2, 3] 是结果,而 [100] 本来会更好。
  • 我的意思是元素数量最多的集合

标签: algorithm search optimization data-structures


【解决方案1】:
  1. 将整数集排序到数组A 中,并让w 成为我们区间的宽度。

  2. 初始化i = j = best_start = best_n = 0

  3. jA[j] < A[i] + w 一样长(或<=,具体取决于您如何定义间隔)。

  4. 如果j - i > best_n 设置best_start = ibest_n = j - i

  5. 增加i = i + 1 如果i, j < length(A) 返回2。

总复杂度由初始排序复杂度决定,O(n log n)。排序后通知复杂性必须是线性的,因为j < n 只会增加,而且我们在每一步都做恒定数量的东西。

【讨论】:

    【解决方案2】:

    您应该首先对数组进行排序(O(N)* log(N)),然后从头开始遍历数组,保持间隔。如果当前数字超过间隔,则存储该数组。如果您发现更大的子集,您可以更新存储。

    这个算法的时间复杂度将是 O(N)* log(N) + O(N),大约是 2 * O(N)。空间复杂度为 O(N)。

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 2013-03-07
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多