1. 思路
和56题类似,因为题目已经保证了有序,那么我们只需要通过类似于冒泡的思路O(n)的时间复杂度将新区间插入并排序,然后就和56题一样的做法
2. 代码
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
intervals.push_back(newInterval);
for(int i = intervals.size() - 1; i > 0; --i)
{
if(intervals[i][0] < intervals[i - 1][0])
swap(intervals[i], intervals[i-1]);
}
return merge(intervals);
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n = intervals.size();
if(n <= 1) return intervals;
int left = intervals[0][0], right = intervals[0][1], k = 0;
for(int i = 1; i < n; ++i)
{
if(intervals[i][0] <= right)
{
right = max(intervals[i][1], right);
}
else
{
intervals[k][0] = left; intervals[k++][1] = right;
left = intervals[i][0]; right = intervals[i][1];
}
}
intervals[k][0] = left; intervals[k++][1] = right;
intervals.resize(k);
return intervals;
}
};