class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> result;
int n = intervals.size();
int i = 0;
// 1. 添加所有在新区间之前且不重叠的区间
while (i < n && intervals[i][1] < newInterval[0]) {
result.push_back(intervals[i]);
i++;
}
// 2. 合并所有与新区间重叠的区间
while (i < n && intervals[i][0] <= newInterval[1]) {
// 更新新区间的起点和终点
newInterval[0] = min(newInterval[0], intervals[i][0]);
newInterval[1] = max(newInterval[1], intervals[i][1]);
i++;
}
// 3. 添加合并后的新区间
result.push_back(newInterval);
// 4. 添加所有在新区间之后的区间
while (i < n) {
result.push_back(intervals[i]);
i++;
}
return result;
}
};
/*
关键点:
第一个循环添加的是完全不重叠的区间
第二个循环是将所有重叠的区间合并成一个大区间
然后我们添加这个合并后的大区间
最后添加所有剩余的区间
*/
57. 插入区间
最新推荐文章于 2025-09-01 21:38:30 发布