LeetCode_107_MergeIntervals


1. question: 合并区间(中等)

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-intervals

示例 1:

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

示例 2:

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

提示:

1
2
3
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

2. answers

这道题没什么可说的,按照左区间排序后,遍历合并即可。代码如下所示:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Solution_0107 {

public int[][] merge(int[][] intervals) {

// 按照左区间升序排序
Arrays.sort(intervals, Comparator.comparingInt(value -> value[0]));

LinkedList<int[]> list = new LinkedList<>();

list.add(intervals[0]);

int[] temp;

for (int i = 1; i < intervals.length; i++) {

temp = list.getLast();

// 重叠
if(intervals[i][0] <= temp[1]){

temp[1] = Math.max(temp[1], intervals[i][1]);
list.removeLast();
list.add(temp);

} else {

// 不重叠
list.add(intervals[i]);
}
}

int[][] result = new int[list.size()][2];

return list.toArray(result);
}

public static void main(String[] args) {
System.out.println();

// int[][] intervals = {{1,3},{2,6},{8,10},{15,18}};
int[][] intervals = {{1,4},{4,5}};

Solution_0107 s = new Solution_0107();

int[][] merge = s.merge(intervals);

for(int[] ints: merge)
System.out.print(ints[0] + "," + ints[1] + "\t");
}
}

3. 备注

参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)代码随想录 (programmercarl.com)


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录