-
Notifications
You must be signed in to change notification settings - Fork 0
/
56. Merge Intervals
62 lines (49 loc) · 2.75 KB
/
56. 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
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
51
52
53
54
55
56
57
58
59
60
61
62
Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
Example 2:
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Constraints:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
题目翻译:
给定一个区间数组,其中 intervals[i] = [starti, endi],合并所有重叠的区间,并返回一个包含输入区间内所有非重叠区间的数组。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:由于区间 [1,3] 和 [2,6] 重叠,将它们合并为 [1,6]。
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 被认为是重叠的。
约束:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
import java.util.Arrays; // 导入Java的Arrays类,用于对数组进行操作
class Solution { // 创建一个名为Solution的类
public int[][] merge(int[][] intervals) { // 定义一个名为merge的公共方法,参数为二维整数数组,返回二维整数数组
if(intervals.length <= 1){ // 判断输入的区间数组长度是否小于等于1
return intervals; // 如果是,则直接返回原数组,因为不存在重叠区间
}
Arrays.sort(intervals,(i1,i2)->Integer.compare(i1[0],i2[0])); // 对区间数组按照每个区间的起始位置进行排序
List<int[]> result = new ArrayList<>(); // 创建一个ArrayList用于存储合并后的区间结果
int[] newInterval = intervals[0]; // 初始化新区间为区间数组的第一个区间
for(int[] interval:intervals){ // 遍历区间数组
if (interval[0] <= newInterval[1]){ // 判断当前区间的起始位置是否小于等于新区间的结束位置
newInterval[1] = Math.max(newInterval[1], interval[1]); // 如果是,则更新新区间的结束位置为两个区间的结束位置的较大值
}
else { // 如果当前区间的起始位置大于新区间的结束位置
result.add(newInterval); // 将新区间加入结果列表
newInterval = interval; // 更新新区间为当前区间
}
}
result.add(newInterval); // 循环结束后,将最后一个新区间加入结果列表
return result.toArray(new int[result.size()][]); // 将结果列表转换为二维整数数组并返回
}
}