Solving Leetcode Interviews in Seconds with AI: Insert Interval
Introduction
In this blog post, we will explore how to solve the LeetCode problem "57" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the ith interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval. Insert newInterval into intervals such that intervals is still sorted in ascending order by starti and intervals still does not have any overlapping intervals (merge overlapping intervals if necessary). Return intervals after the insertion. Note that you don't need to modify intervals in-place. You can make a new array and return it. 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]. Constraints: 0 <= intervals.length <= 104 intervals[i].length == 2 0 <= starti <= endi <= 105 intervals is sorted by starti in ascending order. newInterval.length == 2 0 <= start <= end <= 105
Explanation
Here's a breakdown of the solution:
- Identify Non-Overlapping Regions: Iterate through the sorted intervals, adding intervals that completely precede the
newIntervalto the result. - Merge Overlapping Regions: Once an overlap is detected, merge the
newIntervalwith all overlapping intervals until a non-overlapping interval is found. Update thenewIntervalboundaries accordingly. Append Remaining Regions: Add the merged
newIntervaland any remaining intervals after the merge to the result.Runtime Complexity: O(n), where n is the number of intervals. Storage Complexity: O(n) as a new list is created.
Code
def insert(intervals, newInterval):
"""
Inserts a new interval into a sorted list of non-overlapping intervals,
merging if necessary.
Args:
intervals: A list of intervals, where each interval is a list of two integers [start, end].
newInterval: The new interval to insert, represented as a list of two integers [start, end].
Returns:
A new list of intervals with the new interval inserted and overlapping intervals merged.
"""
merged = []
i = 0
# Add all intervals ending before the new interval starts
while i < len(intervals) and intervals[i][1] < newInterval[0]:
merged.append(intervals[i])
i += 1
# Merge overlapping intervals
while i < len(intervals) and intervals[i][0] <= newInterval[1]:
newInterval[0] = min(newInterval[0], intervals[i][0])
newInterval[1] = max(newInterval[1], intervals[i][1])
i += 1
# Add the merged interval
merged.append(newInterval)
# Add the remaining intervals
while i < len(intervals):
merged.append(intervals[i])
i += 1
return merged