forked from mengli/leetcode
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergeIntervals.java
More file actions
Latest commit
43 lines (40 loc) · 1.1 KB
/
Copy pathMergeIntervals.java
File metadata and controls
43 lines (40 loc) · 1.1 KB
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
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Comparator;
/**
* Given a collection of intervals, merge all overlapping intervals.
*
* For example,
* Given [1,3],[2,6],[8,10],[15,18],
* return [1,6],[8,10],[15,18].
*/
publicclassMergeIntervals {
publicclassIntervalCmpimplementsComparator<Interval> {
@Override
publicintcompare(Intervali1, Intervali2) {
if (i1.start < i2.start) return -1;
if (i1.start == i2.start && i1.end <= i2.end) return -1;
return1;
}
}
publicArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> ret = newArrayList<Interval>();
if (intervals.size() == 0) returnret;
Interval[] arr = newInterval[intervals.size()];
intervals.toArray(arr);
Arrays.sort(arr, newIntervalCmp());
intstart = arr[0].start;
intend = arr[0].end;
for (inti = 0; i < arr.length; i++) {
if (arr[i].start <= end) {
end = Math.max(end, arr[i].end);
} else {
ret.add(newInterval(start, end));
start = arr[i].start;
end = arr[i].end;
}
}
ret.add(newInterval(start, end));
returnret;
}
}