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]. Example 3:
Input: intervals = [], newInterval = [5,7] Output: [[5,7]] Example 4:
Input: intervals = [[1,5]], newInterval = [2,3] Output: [[1,5]] Example 5:
Input: intervals = [[1,5]], newInterval = [2,7] Output: [[1,7]]
Constraints:
0 <= intervals.length <= 104 intervals[i].length == 2 0 <= intervals[i][0] <= intervals[i][1] <= 105 intervals is sorted by intervals[i][0] in ascending order. newInterval.length == 2 0 <= newInterval[0] <= newInterval[1] <= 105
public class Solution {
public int[][] Insert(int[][] intervals, int[] newInterval) {
var res = new List<int[]>();
if(intervals.Length==0){
res.Add(newInterval);
return res.ToArray();
}
int start = 0;
int end = 0;
int i=0;
for(i=0;i<intervals.Length && intervals[i][1] < newInterval[0];i++){
if(intervals[i][1]<newInterval[0]){
res.Add(new int[]{intervals[i][0], intervals[i][1]});
}
}
for(;i<intervals.Length && intervals[i][0]<= newInterval[1];i++){
newInterval[0]=Math.Min(newInterval[0], intervals[i][0]);
newInterval[1]=Math.Max(newInterval[1], intervals[i][1]);
}
res.Add(newInterval);
for(;i<intervals.Length;i++){
res.Add(new int[]{intervals[i][0], intervals[i][1]});
}
return res.ToArray();
}
}
Time Complexity: O(n)
Space Complexity: O(n)


