这是一个典型的模拟题目,区间可以分成三部分
有交集的部分需要处理合成一个区间,这里边界条件比较多。写的时候需要特别小心
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int n = intervals.size();
int i = 0;
while(i<n&&intervals[i][1]<newInterval[0]) res.push_back(intervals[i++]); // 处理开头没有相交
if(i==n){
res.push_back(newInterval);
return res;
}
int left = min(intervals[i][0],newInterval[0]);
while(i<n&&intervals[i][1]<newInterval[1]) i++; // 处理相交部分,相交部分合成一个
if(i<n&&newInterval[1]>=intervals[i][0]) res.push_back({left,intervals[i++][1]});
else res.push_back({left,newInterval[1]});
while(i<n) res.push_back(intervals[i++]); // 处理后面没有相交
return res;
}
};