56. merge intervals

Given a collection of intervals, merge all overlapping intervals.

Example 1:

1
2
3
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

1
2
3
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
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

* 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; }
* }
*/
class {
public List<Interval> merge(List<Interval> intervals) {
int n = intervals.size();
if (n <= 1) {
return intervals;
}
int[] start = new int[n];
int[] end = new int[n];
int i = 0;
for (Interval interval : intervals) {
start[i] = interval.start;
end[i++] = interval.end;
}
Arrays.sort(start);
Arrays.sort(end);
List<Interval> result = new ArrayList<>();
int j = 0;
int s = start[0];
for (i = 1; i < n; i++, j++) {
if (start[i] > end[j]) {
result.add(new Interval(s, end[j]));
s = start[i];
}
}
result.add(new Interval(s, end[n-1]));
return result;
}
}