我正在尝试解决以下问题:给定 N 个时间间隔,每个时间间隔指定为(开始,结束),不重叠,基于开始排序 - 找到一个包含给定日期的时间间隔。例如给出:
[1,4] [5,8] [9,10][11,20]
3 属于第一个区间,15 属于第四个区间,以此类推。
到目前为止,我有以下基本想法:
- 我们可以使用二分查找找到对应的区间(Log N)
- 由于可能只有少数间隔较大,其余间隔较小,因此可能值得根据其持续时间对迭代进行排序。然后,从统计上讲,大多数时候我们会“达到”最长的间隔 (O(1)),只是有时这会导致 N 的最坏情况复杂度。
我在想是否有结合这两种方法的空间。另一种想法是根据持续时间进行排序并将所有间隔插入树中,并按开始日期进行比较,在最坏的情况下,当最长持续时间按时间顺序排列时,这种方法的性能等于 2。
我想象的理想解决方案是有一棵树(或一些类似的数据结构),它在顶部包含最长的间隔,然后两个分支将具有接下来的两个最长间隔等。但是,我看不出有什么方法可以分支那棵树,即由于我们明确假设我们根据长度插入,我们不能真正丢弃树的左侧或右侧。
任何意见将不胜感激。