Post

Merge Intervals

LeetCode https://leetcode.cn/problems/merge-intervals/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals == null || intervals.length < 1) {
            return intervals;
        }
        // intervals[i][0] < intervals[i+1][0] ???
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

        List<int[]> res = new ArrayList<>();
        int[] currentInterval = intervals[0];
        // intervals[i] = [start(i), end(i)]
        // Merge rule: start(i) < start(i+1) < end(i) < end(i+1), for each intervals[i]
        for (int i = 1; i < intervals.length; i++) {
            if (currentInterval[1] >= intervals[i][0]) {
                currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
            } else {
                res.add(currentInterval);
                currentInterval = intervals[i];
            }
        }
        res.add(currentInterval);
        return res.toArray(new int[res.size()][]);
    }
}

Complexity

  • Time = O(nlogn)
  • Space = O(n)
This post is licensed under CC BY 4.0 by the author.