算法问题:同一时间不能存在三个公告
1.创建公告时有生效的时间段:开始时间和过期时间;
2.当创建新的公告时,要保证同一时间点不能存在三个同时生效的公告
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1.创建公告时有生效的时间段:开始时间和过期时间;
2.当创建新的公告时,要保证同一时间点不能存在三个同时生效的公告
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
每次新建的时候验证,先查出与当前新建的有交叉的集合,然后验证集合中有没有两两交叉的,如果有,那么就会不能创建,这样就保证了不会在同一时间存在三个公告
直接写个 sql 就搞定了:
如果结果小于3,就创建。
插入时,遍历表,判断当前时间戳是否在两个时间戳之间,并记录符合该条件的数量,若>=3,不执行插入。否则,插入数据表。
用两个时间点,统计一下这个时间段里面有效的公告有几个!
多余3个就不能创建了。
一个笨办法,查出所有时间上与新公告有交集的,然后按日做统计
试着写了下,可以参考一下,
经典线段覆盖问题。不会 Java,给你个 O(n) 的思路。
先找出所有和待验证区间有交集的区间,按区间左端点从小到大排序
记第一个区间为 CurrentInternal
对于 CurrentInternal,考察其下一项 NextInterval:若不与 CurrentInternal 相交,记其为 CurrentInternal,跳至 2;否则,记其交区间为 Intersection。
对于 Intersection,遍历 NextInterval 之后的项:若无与 Intersection 相交的区间,则记 NextInterval 为 CurrentInterval,跳至 2;否则,说明有三个相交的区间,退出。
若遍历完整个列表,则证明待验证区间合法。
附送一个 JS 写的 DEMO,希望大家玩得开心
https://jsfiddle.net/hsfzxjy/7td0rwr2/28/