地址
https://leetcode.com/problems/insert-interval/description/
题目
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.Example 1:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]Example 2:
Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].
思路
模拟下就好了,没什么好说的
代码
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> insert(vector<Interval>& va, Interval vb) {
vector<Interval> ans;
Interval tmp;
int n=va.size();
if(n==0)
{
ans.push_back(vb);
return ans;
}
if(vb.start > va[n-1].end)
{
for(int i=0; i<n; i++) ans.push_back(va[i]);
ans.push_back(vb);
return ans;
}
if(vb.end < va[0].start)
{
ans.push_back(vb);
for(int i=0; i<n; i++) ans.push_back(va[i]);
return ans;
}
for(int i=0,l,r; i<n; i++)
{
if(vb.start<=va[i].end)
{
if(vb.end<va[i].start)
{
ans.push_back(vb);
while(i<n) ans.push_back(va[i++]);
}
else
{
l=min(vb.start, va[i].start);
r=max(vb.end, va[i].end);
for(int j=i,ff=1; j<=n; j++)
if(j==n)
{
if(!ff) break;
tmp.start = l;
tmp.end = r;
ans.push_back(tmp);
}
else if(vb.end>=va[j].start)
r=max(r, va[j].end);
else
{
if(ff)
{
tmp.start = l;
tmp.end = r;
ans.push_back(tmp);
ff = 0;
}
ans.push_back(va[j]);
}
}
return ans;
}
ans.push_back(va[i]);
}
}
};