跳到主要内容

实用场景

给定数组 n 个数组,长度为 2,将数组下标 0 为左区间,下标 1 为右区间,检查这些数组是否存在交叉

  • 场景: 检查多组时间区间是否存在交叉
  • 前提: 左区间小于右区间

如果满足以下条件之一,则认为它们有交叉:

left1 <= right2 且 left2 <= right1

left1 = right2 或 left2 = right1(即一个区间紧贴另一个区间)

另外,如果两个区间有一个是空区间(即 left === right),也认为它们有交叉

def intervals_overlap(intervals):
# 如果没有提供区间或者提供的区间少于两个,直接返回False
if not intervals or len(intervals) < 2:
return False

for i in range(len(intervals)):
for j in range(i+1, len(intervals)):
left1, right1 = intervals[i]
left2, right2 = intervals[j]

# 检查是否相交
if (left1 <= right2 and left2 <= right1) or (left1 == right1 or left2 == right2):
return True

# 如果所有区间都不相交,返回False
return False

# 示例
intervals = [
[1, 3],
[2, 5],
[8, 10],
[15, 18]
]

print(intervals_overlap(intervals)) # 输出应该是True,因为前两个区间有交叉
function intervalsOverlap(intervals) {
// 如果没有提供区间或者提供的区间少于两个,直接返回false
if (!intervals || intervals.length < 2) {
return false;
}

for (let i = 0; i < intervals.length; i++) {
for (let j = i + 1; j < intervals.length; j++) {
let [left1, right1] = intervals[i];
let [left2, right2] = intervals[j];

// 检查是否相交
if ((left1 <= right2 && left2 <= right1) || left1 === right1 || left2 === right2) {
return true;
}
}
}

// 如果所有区间都不相交,返回false
return false;
}
// 示例
let intervals = [
[1, 3],
[2, 5],
[8, 10],
[15, 18],
];

console.log(intervalsOverlap(intervals)); // 输出应该是true,因为前两个区间有交叉