Intervals
Insert Interval
DESCRIPTION (inspired by Leetcode.com)
Given a list of intervals intervals and an interval newInterval, write a function to insert newInterval into a list of existing, non-overlapping, and sorted intervals based on their starting points. The function should ensure that after the new interval is added, the list remains sorted without any overlapping intervals, merging them if needed.
Input:
intervals = [[1,3],[6,9]] newInterval = [2,5]
Output:
[[1,5],[6,9]]
Explanation: The new interval [2,5] overlaps with [1,3], so they are merged into [1,5].
Explanation
- Add all the intervals ending before newInterval starts to merged.
- Merge all overlapping intervals with newInterval and add that merged interval to merged.
- Add all the intervals starting after newInterval to merged.
Phase 1
def insertIntervals(intervals, newInterval):merged = []i = 0n = len(intervals)while i < n and intervals[i][1] < newInterval[0]:merged.append(intervals[i])i += 1while i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(intervals[i][0], newInterval[0])newInterval[1] = max(intervals[i][1], newInterval[1])i += 1merged.append(newInterval)for j in range(i, n):merged.append(intervals[j])return merged
initialize variables
0 / 1
Phase 2
def insertIntervals(intervals, newInterval):merged = []i = 0n = len(intervals)while i < n and intervals[i][1] < newInterval[0]:merged.append(intervals[i])i += 1while i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(intervals[i][0], newInterval[0])newInterval[1] = max(intervals[i][1], newInterval[1])i += 1merged.append(newInterval)for j in range(i, n):merged.append(intervals[j])return merged
add intervals before newInterval
0 / 4
Phase 3
def insertIntervals(intervals, newInterval):merged = []i = 0n = len(intervals)while i < n and intervals[i][1] < newInterval[0]:merged.append(intervals[i])i += 1while i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(intervals[i][0], newInterval[0])newInterval[1] = max(intervals[i][1], newInterval[1])i += 1merged.append(newInterval)for j in range(i, n):merged.append(intervals[j])return merged
j = 4
0 / 2
Test Your Knowledge
Login to take the complexity quiz and track your progress
Complexity Analysis
Time Complexity: O(n) where n is the number of intervals. We iterate through all intervals once to merge them.
Space Complexity: O(n) where n is the number of intervals. We need space for the merged output array.
Solution
def insertIntervals(intervals, newInterval):merged = []i = 0n = len(intervals)while i < n and intervals[i][1] < newInterval[0]:merged.append(intervals[i])i += 1while i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(intervals[i][0], newInterval[0])newInterval[1] = max(intervals[i][1], newInterval[1])i += 1merged.append(newInterval)for j in range(i, n):merged.append(intervals[j])return merged
insert interval
0 / 9
Mark as read
Unlock Premium Coding Content
On This Page
Your account is free and you can post anonymously if you choose.