algorithm - 包含所有对象的最小区间

标签 algorithm data-structures

给定一组对象,每个对象都放在自然数线上的几个位置:找到包含所有对象的最小区间 [a, b]

示例:考虑 3 个对象 A、B、C

A 位于 1, 5, 7
B 位于 2, 4, 6
C 放在 4, 8, 9

包含所有三个对象的最小区间是[4, 5]

我只能想到 O(S^2) 解决方案,其中 S 是包含所有对象位置的最小间隔,即 [1, 9]

有更好的方法吗?

PS:请注意,多个对象可以放置在同一位置。

最佳答案

将所有数据点按升序排序(nlogn次)。
从左边开始遍历这些数据点。

跟踪以下内容:
1. 对于每种类型的对象,维护找到的最后一个对象的坐标条目(为了快速操作,可能通过 hashmap)。
2. 目前找到的最小区间长度
3. 列表中最早元素的坐标。这是为了跟踪当前间隔的开始。

每当你遇到一个物体,
1. 更新其在维护列表中的条目。
2. 查看最早元素坐标是否更新。如果是,则计算新的间隔长度,如果新的间隔长度更小,则更新最小间隔长度。

您首先需要确定您遇到了所有类型的对象,以计算第一个有效的最小间隔长度。您可以通过柜台办理。

如果不同类型元素的数量是有界的并且很小,那么复杂度的阶数是 O(nlogn),其中 n 是数据点的总数。

关于algorithm - 包含所有对象的最小区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310056/

相关文章:

javascript - 从 Javascript 数组创建嵌套对象

c - C 中的基本链表操作

algorithm - 从邻接表表示中删除重复顶点和自循环的图形算法

ruby trie 实现引用问题

c++ - 用于整数下限和上限查询的快速数据结构?

algorithm - 如何在面试中使用数据结构

algorithm - 如果第一个源节点出队后队列已经为空,广度优先搜索如何工作?

javascript - 以最低成本为一组给定功能选择产品的算法?

algorithm - AS3动态文本算法

C++ 对 vector 或链表进行排序