Intervals & Overlap Scheduling

Data Structures

Managing overlapping timelines, meeting rooms, and range merges

41 problems·3 Easy·27 Medium·11 Hard
Pattern Study Guide & Cheat Sheet

Sort ranges by start (or end) time so overlapping relationships can be resolved linearly by comparing adjacent pairs.

Core Invariant: Once sorted by start time (`start_i <= start_j`), interval J overlaps with interval I if and only if `start_j <= end_i`. When overlapping, merged end is `max(end_i, end_j)`.

Recognize it (Keywords & Signals)
  • Merge overlapping intervals
  • Insert interval into sorted non-overlapping list
  • Non-overlapping intervals (erase minimum overlaps)
  • Meeting rooms (minimum conference rooms needed / can attend all)
When NOT to use

Intervals cannot be sorted or endpoints are infinite/continuous without discrete ordering.

How to solve (Step-by-step)
  1. 1.Sort intervals by start time: `intervals.sort(key=lambda x: x[0])`.
  2. 2.Initialize `merged = [intervals[0]]`.
  3. 3.Iterate through subsequent intervals `[curr_start, curr_end]`.
  4. 4.If `curr_start <= merged[-1][1]`: overlap exists! Update `merged[-1][1] = max(merged[-1][1], curr_end)`.
  5. 5.Else: no overlap. Append `[curr_start, curr_end]` to `merged`.
  6. 6.Return `merged`.
Watch for (Interview Traps)
  • Touching endpoints edge case: verify if `[1, 2]` and `[2, 3]` overlap (`start <= last_end` vs `start < last_end`)
  • Forgetting `max(last_end, end)`: the previous interval might already be longer than current
  • Meeting Rooms II: sorting only by start time without tracking end times with a heap
Merge Overlapping Intervals
def merge_intervals(intervals: list[list[int]]) -> list[list[int]]:
    if not intervals:
        return []
        
    # Sort primarily by start time
    intervals.sort(key=lambda x: x[0])
    merged = [intervals[0]]
    
    for start, end in intervals[1:]:
        last_end = merged[-1][1]
        
        if start <= last_end:
            # Overlapping intervals: merge by taking the max end
            merged[-1][1] = max(last_end, end)
        else:
            # Non-overlapping: append as separate interval
            merged.append([start, end])
            
    return merged
Cost
O(n log n) dominated by initial sort · O(n) for output list (Linear O(n) pass after the O(n log n) sort.)
Canonical problems
#56 Merge Intervals: Standard sort by start time and extend ends
#57 Insert Interval: Add before overlap, merge during overlap, append after overlap
#435 Non-overlapping Intervals: Greedy: sort by end time to keep intervals that finish earliest
#253 Meeting Rooms II: Min-heap of end times tracks currently occupied rooms
Medium·120 companies·Max freq 100%·Acc 52.3%
TeslaChewyX+117
Medium·47 companies·Max freq 100%·Acc 52.7%
SplunkSnapWorldQuant+44
Medium·21 companies·Max freq 88%·Acc 57.4%
VerkadaGrammarlyZoho+18
Medium·18 companies·Max freq 75%·Acc 45.5%
MongoDBTescoNeetCode 150+15
Medium·12 companies·Max freq 100%·Acc 73.1%
VerkadaMixpanelMeta+9
Medium·12 companies·Max freq 89%·Acc 56.4%
CareemLyftZepto+9
Hard·12 companies·Max freq 75%·Acc 73.0%
CitadelAirbnbIntuit+9
Medium·12 companies·Max freq 75%·Acc 58.3%
FlexportUberIntuit+9
Hard·12 companies·Max freq 63%·Acc 51.4%
TikTokPinterestWalmart Labs+9
Easy·12 companies·Max freq 60%·Acc 59.5%
NeetCode 150NeetCode 150TikTok+9
Medium·8 companies·Max freq 100%·Acc 61.7%
LivspaceZohoTikTok+5
Medium·7 companies·Max freq 100%·Acc 64.0%
razorpayGrammarlyJPMorgan Chase+4
Medium·7 companies·Max freq 88%·Acc 63.6%
AdobeWalmart LabsIBM+4
Hard·6 companies·Max freq 63%·Acc 59.9%
General MotorsMetaGoogle+3
Medium·6 companies·Max freq 61%·Acc 60.0%
StripeAmazonGoogle+3
Easy·5 companies·Max freq 100%·Acc 57.9%
Riot GamesJane Streettcs+2
Hard·5 companies·Max freq 88%·Acc 44.9%
SoFiLinkedInOracle+2
Hard·5 companies·Max freq 60%·Acc 0.5%
NeetCode 150NeetCode 150Google+2
Easy·5 companies·Max freq 38%·Acc 54.6%
MicrosofttcsGoogle+2
Medium·4 companies·Max freq 88%·Acc 52.8%
VerilyAndurilGoogle+1
Hard·4 companies·Max freq 63%·Acc 36.1%
LinkedInDatabricksUber+1
Medium·4 companies·Max freq 25%·Acc 56.1%
MicrosoftAmazonBloomberg+1
Hard·3 companies·Max freq 100%·Acc 52.2%
DirectiMedia.netMedia.net
Medium·3 companies·Max freq 82%·Acc 61.0%
SprinklrAmazonGoogle
Medium·3 companies·Max freq 75%·Acc 37.9%
InfosysNetAppGoogle
Medium·3 companies·Max freq 30%·Acc 63.3%
AppleGoogleAmazon
Medium·2 companies·Max freq 100%·Acc 48.1%
TuSimpleWayve
Hard·2 companies·Max freq 95%·Acc 31.8%
SprinklrAmazon
Medium·2 companies·Max freq 50%·Acc 44.4%
AgodaSalesforce
Medium·2 companies·Max freq 28%·Acc 40.1%
UberGoogle
Hard·2 companies·Max freq 13%·Acc 60.3%
AmazonGoogle
Medium·2 companies·Max freq 13%·Acc 49.5%
MicrosoftGoogle
Medium·1 companies·Max freq 89%·Acc 0.4%
American Express
Medium·1 companies·Max freq 75%·Acc 50.1%
DE Shaw
Hard·1 companies·Max freq 25%·Acc 43.2%
Amazon
Medium·1 companies·Max freq 25%·Acc 46.1%
Amazon
Medium·1 companies·Max freq 25%·Acc 67.3%
Google
Hard·1 companies·Max freq 25%·Acc 72.0%
Google
Medium·1 companies·Max freq 25%·Acc 36.9%
Google
Medium·1 companies·Max freq 25%·Acc 49.1%
Google
Medium·1 companies·Max freq 16%·Acc 46.1%
Google
Showing 41 of 41 problems in Intervals & Overlap SchedulingFiltered: All Companies