let arr = [
{ start: '2021-10-01', end: '2021-11-01' },
{ start: '2021-12-01', end: '2021-12-30' },
{ start: '2021-08-01', end: '2021-09-30' },
{ start: '2021-08-10', end: '2021-08-20' }
]
数组中有多个日期对象(开始时间和结束时间)想要快速判断(消耗低…)其中的日期是否有重合, 比如2021-08-10, 2021-08-20,是在arr[2]的时间范围内,已经重合… 该用哪种方式判断比较好
这个有很多方法,要效率高,还有用空间换时间的方法。
比如可以构建一个日期对应的set集合,每个时间段都会让set的某个连续区域被设置,在新区域来的时候,就先检查对应区域是否已经有被设置的,有就有重叠啦,否则就进行设置。
比如这数组中的日期段是在一年以内,则用366bit的set就可以进行全部标注,每个日期段都可以映射到某位中,当然,这个只对于日期不是太长的比较方便。
另外一种其实也是只需要依次遍历,而不需要提前排序,而是边插入边排序,比如构造一个单向链表类似的结构,每次新时间段来,如果能够插入到合适的位置,则插入,否则就是存在重叠啦,这个判断依据就是:
既 Ea<Sc<Ec<Sb 为可以插入,否则有重叠。