LeetCode56-合并区间

题目链接

英文链接:https://leetcode.com/problems/merge-intervals/

中文链接:https://leetcode-cn.com/problems/merge-intervals/

题目详述

  1. 给出一个区间的集合,请合并所有重叠的区间。

    示例 1:

    1
    2
    3
    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

    示例 2:

    1
    2
    3
    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题目详解

  • 先按照 Interval.start 从小到大排序,再进行遍历操作。
  • 设当前结点为 cur,前一个结点为 pre,如果 pre.end >= cur.start,就合并两个区间,即 pre.end = max(pre.end, cur.end)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class LeetCode_00056 {

public List<Interval> merge(List<Interval> intervals) {
// 首先按照 Interval.start 从小到大排序
Collections.sort(intervals, Comparator.comparingInt(o -> o.start));
LinkedList<Interval> res = new LinkedList<>();
// 如果 pre.end >= cur.start,就合并两个区间,即 pre.end = max(pre.end, cur.end)
for (Interval interval : intervals) {
if (res.isEmpty() || res.getLast().end < interval.start) {
res.add(interval);
} else {
res.getLast().end = Integer.max(res.getLast().end, interval.end);
}
}
return res;
}
}