1. 题目来源
链接:57. 插入区间
2. 题目解析
前导题:
就是一个纯模拟题。分三步走就行了:
思路:
- 顺序遍历区间,将前段没有交集的区间加入答案。
- 若没遍历完区间,则说明有交集,则开始进行区间合并即可。首先以最小值更新左端点,其次一直向后找能合并的区间。更新右端点即可。
- 若没遍历完区间,则说明后面还有无交集部分,则直接加入答案就行了。
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
代码:
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& a, vector<int>& b) {
vector<vector<int>> ans;
int k = 0;
while (k < a.size() && a[k][1] < b[0]) ans.push_back(a[k ++ ]);
if (k < a.size()) {
b[0] = min(b[0], a[k][0]);
while (k < a.size() && a[k][0] <= b[1]) b[1] = max(b[1], a[k ++ ][1]);
}
ans.push_back(b);
while (k < a.size()) ans.push_back(a[k ++ ]);
return ans;
}
};