如何快速的在多个时间段中获取是否跟指定时间段有交集?
把一堆时间段存起来,然后传入一个时间段,快速比对出是否有相交叉的时间段?
突然看到了一个思路:假如时间都是半个小时一截的,一天24小时,可以分成48个半个小时,那么可以用长度为48的数组表示这半个小时是否被占用,0未占用 1占用,例如a = [1,1,0,...] 就表示00:00 ~ 00:30、00:30 ~ 01:00是占用的。如果你是一个内存吝啬型的人,那么可以考虑用位运算来表示时间占用情况。
这样以来,遍历到每一个元素直接查数组看是不是被占用了就行,时间复杂度是O(n)。
可以将a存入redis,key为a对应的日期,这样我们只需要查询条件中的日期中是否有被占用的就行了。
但是redis如果崩了我还没相到兜底的方案。如有更优的方案,请多多指教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以使用线段树,先把现存的时间段添加到线段树中,每一个添加一个时间段就把该时间段对应的区间全体累加1,等查询的时候只需要看要查询区间的sum是否大于0就知道是否有相交了,这样的话查询和添加时间段,删除时间段的时间复杂度都是O(log(N)),其中N为区间的个数,比如按分钟分割的话N就为60 * 24