986. 区间列表的交集
986. 区间列表的交集
题目
You are given two lists of closed intervals, firstList and secondList, where firstList[i] = [starti, endi] and secondList[j] = [startj, endj]. Each list of intervals is pairwise disjoint and in sorted order.
Return the intersection of these two interval lists.
A closed interval [a, b] (with a <= b) denotes the set of real numbers x with a <= x <= b.
The intersection of two closed intervals is a set of real numbers that are either empty or represented as a closed interval. For example, the intersection of [1, 3] and [2, 4] is [2, 3].
Example 1:

Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
Example 2:
Input: firstList = [[1,3],[5,9]], secondList = []
Output: []
Constraints:
0 <= firstList.length, secondList.length <= 1000firstList.length + secondList.length >= 10 <= starti < endi <= 10^9endi < starti+10 <= startj < endj <= 10^9endj < startj+1
题目大意
给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而 secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。
返回这 两个区间列表的交集 。
形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b 。
两个闭区间的 交集 是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3] 。
解题思路
我们用 [a1, a2] 和 [b1, b2] 表示在 A 和 B 中的两个区间,如果这两个区间有交集,需满足 b2 >= a1 && a2 >= b1,分下面四种情况:

根据上图可以发现规律,假设交集区间是 [c1, c2],那么
c1 = max(a1, b1)c2 = min(a2, b2)
这一点就是寻找交集的核心。
代码
/**
* @param {number[][]} firstList
* @param {number[][]} secondList
* @return {number[][]}
*/
var intervalIntersection = function (firstList, secondList) {
let res = [],
i = 0,
j = 0;
while (i < firstList.length && j < secondList.length) {
let a1 = firstList[i][0],
a2 = firstList[i][1],
b1 = secondList[j][0],
b2 = secondList[j][1];
if (a1 <= b2 && a2 >= b1) {
res.push([Math.max(a1, b1), Math.min(a2, b2)]);
}
if (b2 < a2) {
j++;
} else {
i++;
}
}
return res;
};
相关题目
| 题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
|---|---|---|---|---|---|
| 56 | 合并区间 | [✓] | 数组 排序 | 🟠 | 🀄️ 🔗 |
| 88 | 合并两个有序数组 | [✓] | 数组 双指针 排序 | 🟢 | 🀄️ 🔗 |
| 759 | 员工空闲时间 🔒 | 数组 排序 堆(优先队列) | 🔴 | 🀄️ 🔗 | |
| 2410 | 运动员和训练师的最大匹配数 | [✓] | 贪心 数组 双指针 1+ | 🟠 | 🀄️ 🔗 |
