57. 插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
解题思路: 先尽可能将新区间合并到区间列表中,若未合并,则新区间的位置可能是在列表头部,中间,尾部。
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
if (intervals.empty()) return {newInterval};
vector<vector<int>> res;
int pos = -1;
for (int i = 0; i < intervals.size(); ++i) {
if (intervals[i][0] <= newInterval[1] && intervals[i][1] >= newInterval[0]) {
newInterval[0] = min(newInterval[0], intervals[i][0]);
newInterval[1] = max(newInterval[1], intervals[i][1]);
if (pos == -1) pos = i;
} else {
res.push_back(intervals[i]);
}
}
if (pos != -1) res.insert(res.begin() + pos, newInterval);
else {
if (res[0][0] > newInterval[1]) res.insert(res.begin(), newInterval);
else if (res.back()[1] < newInterval[0]) res.push_back(newInterval);
else {
for (int i = 1; i <= res.size() - 1; ++i) {
if (res[i][0] > newInterval[1] && res[i - 1][1] < newInterval[0]) {
res.insert(res.begin() + i, newInterval);
break;
}
}
}
}
return res;
}
};