前两天在做公司业务时,碰到一个需求:求几个区间是否存在交集。当时在网上也找了找,不过当时并没有搞懂,昨晚突然开窍。以此来记录该功能是如何实现:
function Interval(left, right){
this.left = left;
this.right = right;
}
let inv1 = new Interval(0, 15);
let inv2 = new Interval(15, 27);
let inv3 = new Interval(28, 39);
let inv4 = new Interval(28, 51);
let intervals = [inv1, inv2, inv3, inv4]
for (let i = 0; i < intervals.length-1; i++) {
for (let j = i+1; j < intervals.length; j++) {
if (intervals[i].right >= intervals[j].left) {
// 下面两行只是为了方便输出,可忽略
let msg_1 = '[' + intervals[i].left + ', ' + intervals[i].right + ']';
let msg_2 = '[' + intervals[j].left + ', ' + intervals[j].right + ']';
console.log(msg_1 + "与" + msg_2 + "存在交集");
}
}
}
要点:如果一个区间的右边大于等于另一个区间的左边,那么这两个区间就存在交集。