校验多个时间段/数值区间冲突问题,返回所有冲突的id

一、问题描述

  1. 现有多个时间段如 :
  beginTime: 2021-02-03 10:00:00 ,EndTime: 2021-02-03 12:00:00 
  beginTime: 2021-02-03 14:00:00 ,EndTime: 2021-02-03 16:00:00 
  beginTime: 2021-02-03 11:00:00 ,EndTime: 2021-02-03 13:00:00 
  beginTime: 2021-02-03 15:00:00 ,EndTime: 2021-02-03 17:00:00 
  beginTime: 2021-02-04 10:00:00 ,EndTime: 2021-02-04 12:00:00 
  beginTime: 2021-02-04 12:00:00 ,EndTime: 2021-02-04 14:00:00 
  beginTime: 2021-02-05 10:00:00 ,EndTime: 2021-02-05 12:00:00 
  beginTime: 2021-02-05 13:00:00 ,EndTime: 2021-02-05 15:00:00 

或者多个数值区间:

  begin: 3    end: 4
  begin: 0    end: 3
  begin: 1    end: 2
  begin: 4    end: 5
  begin: 2    end: 6
  1. 需要判断出有冲突的时间段 或 数值区间
    【冲突】:
    3-4 分别和 0-3,4-5,2-6有冲突,
    0-3 分别和1-2,2-6有冲突
    时间冲突类似数字
  2. 找到所有冲突的时间段or数字区间。

二、问题分析

  1. 暴力法(O(n²)) : 将开始数字和结束数字分别放入两个list里。双重for循环遍历beginList和 endList。如果当前时段的开始时间 大于 下一个时段的结束时间 或者 当前时段的结束时间 小于 下一个时段的开始时间,则没有冲突在这里插入图片描述

  2. 优化解法(O(n)):
    将开始数字和结束数字分别放入两个list,分别进行排序, 删除beginList的第一个数字。for循环遍历beginList,如果开始数字小于或等于结束数字,说明有冲突。
    在这里插入图片描述

  3. 节省空间的优化解法(O(n))
    将列表按照开始数字进行排序,遍历比较。结束数字>=下一个的开始数字,冲突
    在这里插入图片描述

三、代码

  1. 新建一个实体,id,begin,end
import java.io.Serializable;
import java.util.Date;

/**
 * @Description:
 * @Author: juwei
 * @Date: 2021/3/9 11:45
 * @Version: 1.0
 */
public class TimeVo implements Serializable {
   

	private Integer id<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值