Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Insert Interval

Updated
3 min read

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 newInterval to the result.
  • Merge Overlapping Regions: Once an overlap is detected, merge the newInterval with all overlapping intervals until a non-overlapping interval is found. Update the newInterval boundaries accordingly.
  • Append Remaining Regions: Add the merged newInterval and 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

More from this blog

C

Chatmagic blog

2894 posts