3.11 Insert Interval
3.11.1 Problem Metadata
- Platform: LeetCode
- Problem ID: 57
- Difficulty: Hard
- URL: https://leetcode.com/problems/lc-insert-interval/
- Tags: Grind 75, Blind 75, NeetCode 150
- Techniques: Sorting, Array
3.11.2 Description
Given a set of non-overlapping intervals sorted by start time, insert a new interval and merge if necessary.
3.11.5 Solution - Linear Merge
3.11.5.1 Walkthrough
Iterate through intervals, appending those ending before the new interval. Merge overlapping intervals by expanding newInterval. Once the new interval ends before the current interval, append it and the rest.
3.11.5.3 Implementation Steps
- Initialize result lc-list and index
i = 0. - Append all intervals whose end < newInterval.start.
- While intervals overlap with newInterval, update start = min and end = max.
- Append the merged new interval.
- Append remaining intervals.
3.11.5.4 Code - Java
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> result = new ArrayList<>();
int index = 0;
//add all intervals before newInterval
while(index < intervals.length && intervals[index][1] < newInterval[0]) {
result.add(intervals[index]);
index++;
}
//combine all intervals merged with newInterval
while(index < intervals.length && intervals[index][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[index][0]);
newInterval[1] = Math.max(newInterval[1], intervals[index][1]);
index++;
}
//add merged newInterval
result.add(newInterval);
//add remaining intervals after newInterval
while(index < intervals.length) {
result.add(intervals[index]);
index++;
}
return result.toArray(new int[result.size()][]);
}