如何快速的在多个时间段中获取是否跟指定时间段有交集?

发布于 2022-09-12 23:42:08 字数 355 浏览 24 评论 0

把一堆时间段存起来,然后传入一个时间段,快速比对出是否有相交叉的时间段?

突然看到了一个思路:假如时间都是半个小时一截的,一天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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰葑 2022-09-19 23:42:08

可以使用线段树,先把现存的时间段添加到线段树中,每一个添加一个时间段就把该时间段对应的区间全体累加1,等查询的时候只需要看要查询区间的sum是否大于0就知道是否有相交了,这样的话查询和添加时间段,删除时间段的时间复杂度都是O(log(N)),其中N为区间的个数,比如按分钟分割的话N就为60 * 24

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文