57. Insert Interval
Hard
1084135FavoriteShare
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]
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
class Solution {
public:
bool overlap(vector<int> a,vector<int> b){
if(a[0]>b[b.size()-1]) return false;
if(a[a.size()-1]<b[0]) return false;
return true;
}
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int> > res;
int i=0,flag=0;
for(i=0;i<intervals.size();i++){
if(overlap(intervals[i],newInterval)){
newInterval={min(intervals[i][0],newInterval[0]),max(intervals[i][1],newInterval[1])};
cout<<"overlap "<<newInterval[0]<<" "<<newInterval[1]<<endl;
}else{
cout<<"no overlap "<<newInterval[0]<<" "<<newInterval[1]<<endl;
if(intervals[i][1]<newInterval[0]) res.push_back(intervals[i]);
else{
res.push_back(newInterval);flag=1;
break;
}
}
}
if(flag==0) res.push_back(newInterval);
if(flag==1){
cout<<i<<endl;
while(i<intervals.size()){
res.push_back(intervals[i++]);
}
}
return res;
}
};
- Runtime: 20 ms, faster than 49.77% of C++ online submissions for Insert Interval.
- Memory Usage: 13.3 MB, less than 5.00% of C++ online submissions for Insert Interval.
- Next challenges:
- Merge Intervals
- Range Module
- 合并所有的覆盖区间