#算法题-根据提供的时段数组,判断是否时段中存在交集

由于很久没有更新博客和公众号了,找了点以前的资源,暂时发一下更新

我的实现

/***
 * isTimeSpanCross 根据提供的时段数组,判断是否时段中存在交集(只判断时间段,日期取同一天)
 * timeArr=[{id:1,starttime:'xxxx-xx-xx xx:xx:xx',endtime:'xxxx-xx-xx xx:xx:xx'},{id:2,starttime:'xxxx-xx-xx xx:xx:xx',endtime:'xxxx-xx-xx xx:xx:xx'},] 时段数组
 *
 * **/
export  const isTimeSpanCross=(timeArr)=>{

  return new Promise((resolve,reject)=>{

    var isCross=false;
    var timeArr2=[]; 

    timeArr.forEach((item)=>{
      timeArr2.push(item);
    });
 

    for(var i=0;i<timeArr.length;i++)
    {
          var  startDate1 = new Date(timeArr[i].starttime);
          var  endDate1 = new Date(timeArr[i].endtime);
          for(var j=0;j<timeArr2.length;j++){

              if(timeArr[i].id==timeArr2[j].id)
              {
                  continue;
              }
            var  startDate2 = new Date(timeArr2[j].starttime);
            var  endDate2 = new Date(timeArr2[j].endtime);

            if(startDate2<startDate1&&endDate2>startDate1)
            {
              isCross=true;
            }

            if(startDate2>startDate1&&startDate2<endDate1)
            {
              isCross=true;
            }

          }
    }

    resolve({isCross:isCross,source:timeArr});
  });

}

测试用例

var arr=[
     {id:1,starttime:'2020-01-06 08:30:00',endtime:'2020-01-06 09:30:00'},
     {id:2,starttime:'2020-01-06 09:30:00',endtime:'2020-01-06 10:30:00'},
     {id:3,starttime:'2020-01-06 10:30:00',endtime:'2020-01-06 10:40:00'},
     {id:4,starttime:'2020-01-06 10:35:00',endtime:'2020-01-06 10:50:00'},
     {id:5,starttime:'2020-01-06 11:20:00',endtime:'2020-01-06 11:30:00'},
     {id:6,starttime:'2020-01-06 11:10:00',endtime:'2020-01-06 10:22:00'},
   ]
    isTimeSpanCross(arr).then((obj)=>{
     // debugger;
      if(obj.isCross)
      {
        this.$message({
          type: "error",
          message: "时间存在交集!"
        });
      }
      else {
        this.$message({
          type: "success",
          message: "时间不存在交集!"
        });
      }
    });		

更多方法

这个是我2020年的笔记,记录的一种方式,时间过去也有三四年了,可能技术发生了很多变化,如果大家有更好的方式和方法,也可以介绍给我学习一下,欢迎大家多多交流更多的技术方法。