#算法题-根据提供的时段数组,判断是否时段中存在交集
由于很久没有更新博客和公众号了,找了点以前的资源,暂时发一下更新
我的实现
/***
* 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年的笔记,记录的一种方式,时间过去也有三四年了,可能技术发生了很多变化,如果大家有更好的方式和方法,也可以介绍给我学习一下,欢迎大家多多交流更多的技术方法。