问题描述
我遇到了以下问题,似乎无法解决,因为我在此网上找到的最快算法是O(nlgn)。可以线性解决吗?
给出n个间隔[ai,bi]。 (对于每个i:ai我们要确定所有间隔是否彼此不同(不重叠)。用文字描述解决上述问题的线性算法(θ(n))。
例如: 对于n = 5: [0.48,4],[13.31,14],[3.12,5],[8.412,12],[14.27,16] 这里的算法将回答否,因为这两个部分:[3.12,5],[0.48,4]重叠。
解决方法
-
按时间间隔的
bi
值对其进行排序。由于这些值都在1到n 2 之间,因此您可以在线性时间内使用以n为基数的基数排序。 https://en.wikipedia.org/wiki/Radix_sort -
检查每个间隔,看是否与下一个间隔重叠。