業(yè)務(wù)中經(jīng)常遇到判斷區(qū)間是否重疊的問題:
代碼如下:
founction rangeRepeat(array) {
//判斷區(qū)間是否重復(fù)
// 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 {
// 有重復(fù)區(qū)間
return true;
}
}
return false;
}
思路:把區(qū)間想象成一個(gè)以為數(shù)軸。每個(gè)區(qū)間都是數(shù)軸的一部分审磁。將區(qū)間的開始和結(jié)束值合并成一個(gè)數(shù)組,然后排序。判斷有序數(shù)組的2n
和2n+1
項(xiàng)烦绳,是否是某一個(gè)區(qū)間的開始和結(jié)束值。如果不是則區(qū)間有重疊配紫,否則無重疊径密。