需求:
要求校验多个时间区间是否存在重叠,在此把时间区间抽象成一个长度为2的数字数组,形如:[2,10]。
思路:
想校验多个区间是否存在重叠,方法还是很多的,例如:判断剩余区间合在一起的长度加上是所有区间的长度是否是24(不可能超过一天);是否存在一个值在两个以上区间出现过;按照起点按从小到大排序,如果小的区间的终点大于大一点的区间的起点就说明重叠。第二个办法逻辑简单缺点是效率低;第一个和第三个都需要先排序,相比较选择第三种较为方便。
解决办法:
var arr = [[14,22],[1,6],[8,12],[14,50]];
function db(arr){
//排序
var index;
for(var j=0;j
for(var i=j+1;i
if(arr[i][0] < arr[j][0]){
index = arr[i];
arr[i] = arr[j];
arr[j] = index;
}
}
};
//比较
for(var j=0;j
if(arr[j][1] > arr[j+1][0]){
index = "err";
break;
}
}
if(index === "err"){
return false;
}
return true;
}
db(arr);