java 22 lines · 7 steps

Merging overlapping intervals in Java

Sort intervals by start, then sweep once, extending or opening ranges as you go.

Explained by highlit
1public List<int[]> merge(int[][] intervals) {
2 if (intervals.length == 0) {
3 return new ArrayList<>();
4 }
5 
6 Arrays.sort(intervals, Comparator.comparingInt(interval -> interval[0]));
7 
8 List<int[]> merged = new ArrayList<>();
9 int[] current = intervals[0].clone();
10 merged.add(current);
11 
12 for (int[] interval : intervals) {
13 if (interval[0] <= current[1]) {
14 current[1] = Math.max(current[1], interval[1]);
15 } else {
16 current = interval.clone();
17 merged.add(current);
18 }
19 }
20 
21 return merged;
22}
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1Sorting by start makes overlaps detectable with a single left-to-right pass.
  2. 2Overlap means the next start is within the current range's end, so extend rather than append.
  3. 3Cloning the interval you add lets you mutate the running range without corrupting the input.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Merging overlapping intervals in Java — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code