记关于选择时间在各个时间段的检测算法问题

问题背景:

最近,有一个需求,需要对数据做做检测,个人觉得还是很有必要记录一下,虽然离上次写博客,已过去大半年了,但依然需要坚持~

问题描述:

1、一天中,分为各个时间阶段,例如:8-9,10-12,15-17,这样的时间范围的数据

2、需要这一天的数据中添加一个时间段,不能与已有的数据冲突,交叉,简单的讲就是互斥

3、修改数据,针对某一个时间数据进行修改,同样进行检测,不能与其他已有的数据冲突,交叉

解决问题思路(找不合理的数据):

1、先判断需要插入的数据开始时间t1在任意时间范围内,肯定这个数据不能插入;

2、再增加判断插入数据结束时间t2在任意时间范围内,肯定这个数据也不能插入;

3、1和2得出的结论是,数据不在各个时间节点内,但是会出现另一个问题,插入时间可能会包含了已有数据,如:7-10,10-18,与上面的数据不冲突,但是存在交叉,插入新增数据包含了原有数据;

4、需要解决步骤3的问题,再增加判断,当判断任意一个数据都在插入时间的范围内,则这个数据依然不能插入;

经上述四个判断,就能解决该问题,有一种数据互斥的味道,但还不是很明白~(以后慢慢研究)

5、问题3的修改数据,增加一个数据id来判断识别,在检测过程去掉需要修改的数据

代码实现(php):

 

 1 $begin_dt = 7;
 2 
 3 $end_dt = 12;
 4 
 5 for($i = 0; !empty($data) && $i < count($data); $i++){
 6 
 7   if(($begin_dt >= $data[$i]['begin_dt'] && $begin_dt < $data[$i]['end_dt']) ||
 8 
 9   ($end_dt > $data[$i]['begin_dt'] && $end_dt <=$data[$i]['end_dt']) ||
10 
11   ($data[$i]['begin_dt'] > $begin_dt && data[$i]['end_dt'] <$end_dt)){
12 
13     return false;
14   }
15 
16 }

 

转载于:https://www.cnblogs.com/pkangping/p/11043180.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值