← Back to All Algorithms

MediumInterview Frequency: ⭐⭐⭐⭐

Merge Intervals

Merge all overlapping intervals and return non-overlapping result covering same ranges.

SortingIntervals

📚 Table of Contents

  1. Problem Statement
  2. Real-World Analogy
  3. Key Insights
  4. Solution Approach
  5. Step-by-Step Walkthrough
  6. Complexity Analysis
  7. Edge Cases
  8. Test Cases
  9. Interview Tips
  10. Key Takeaways

📋 Problem Statement

Input: list of intervals [start,end]. Merge if overlapping.

Example:
[[1,3],[2,6],[8,10],[15,18]] -> [[1,6],[8,10],[15,18]]

🎯 Real-World Analogy

Merging Calendar Blocks

Sort meetings by start time. Walk left-to-right; if current starts before previous ends, extend previous block.

💡 Key Insights

💻 Solution Approach

Time: O(N log N) | Space: O(N)

Python Implementation

from typing import List def merge(intervals: List[List[int]]) -> List[List[int]]: if not intervals: return [] intervals.sort(key=lambda x: x[0]) merged = [intervals[0][:]] for start, end in intervals[1:]: last = merged[-1] if start <= last[1]: last[1] = max(last[1], end) else: merged.append([start, end]) return merged

JavaScript Implementation

function merge(intervals) { if (intervals.length === 0) return []; intervals.sort((a, b) => a[0] - b[0]); const merged = [[intervals[0][0], intervals[0][1]]]; for (let i = 1; i < intervals.length; i++) { const [start, end] = intervals[i]; const last = merged[merged.length - 1]; if (start <= last[1]) { last[1] = Math.max(last[1], end); } else { merged.push([start, end]); } } return merged; }

🔍 Step-by-Step Walkthrough

⚡ Complexity Analysis

Time: O(N log N) dominated by sorting.

Space: O(N) for merged output.

🔧 Edge Cases

🧪 Test Cases

💼 Interview Tips

🎓 Key Takeaways

← Back to All Algorithms