关于区间重叠的算法
一
需求:
由于公司的项目中可以做多种服务,每种服务都可以自定义服务时间,但是每种服务的时间区间是不能重复的
前提:
区间A[A1, A2], 区间B[B1, B2]...
算法:
stary = max(A1, B1);
end = min(A2, B2);
len = end - start;
当0 <= len 时,说明区间重叠,重叠的区间为len
公司需求的特殊性:
1. 8:00-9:00与9:00-10:00的2个服务是不算重叠的,所以当 0 < len时,区间重叠
2. 只要求判断是否重叠,而无需考虑重叠部分
二
需求:
由于公司项目规定,每个客户可以做什么服务,都有一个有效区间。在有效期间内才能做服务,并且服务本身也有有效期间
前提:
A客户可以做B种类的服务,有效期是2016年4月10日-2018年4月1日;B种类服务,B1有效期为2010年4月1日-2016年11月30日,B2有效期为2016年11月1日-2020年12月31日,当客户A在某月进行添加服务时
算法:
将这个月转为long[]数组,数组下标初始值都为0。A占用下标值0X1,B1占用下标值0X10,B2占用下标值0X100,用for循环将数组值填满,这个数组的下标即可表示A客户能不能做什么服务。
公司需求的特殊性:
1. 可一次性取出某个月某天可以做的所有服务
2. 不用每次都取数据库重新计算,缓存下即可
评论