业务中经常遇到判断区间是否重叠的问题:
时间段是否重叠
代码如下:
founction rangeRepeat(array) {
//判断区间是否重复
// array: [[start, end], [start, end], ...]
// end > start
const concatArr = Array.prototype.concat.apply([], array).sort();
for (let i = 0; i < concatArr.length; i += 2) {
const start = concatArr[i];
const end = concatArr[i + 1];
const isRangeStartAndEnd = array.some(item => {
return item[0] === start && item[1] === end
})
if(isRangeStartAndEnd) {
continue
} else {
// 有重复区间
return true;
}
}
return false;
}
思路:把区间想象成一个以为数轴。每个区间都是数轴的一部分。将区间的开始和结束值合并成一个数组,然后排序。判断有序数组的2n
和2n+1
项,是否是某一个区间的开始和结束值。如果不是则区间有重叠,否则无重叠。
网友评论