forked from mengli/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMerge Intervals.java
More file actions
53 lines (49 loc) · 1.42 KB
/
Merge Intervals.java
File metadata and controls
53 lines (49 loc) · 1.42 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
44
45
46
47
48
49
50
51
52
53
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].
/**
* 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 Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
int size = intervals.size();
int count;
do {
count = 0;
for (int i = 0; i < size; i++) {
Interval interval1 = intervals.get(i);
if (interval1 != null) {
for (int j = 0; j < size; j++) {
Interval interval2 = intervals.get(j);
if (i != j && interval2 != null && check(interval1, interval2)) {
interval1 = merge(interval1, interval2);
intervals.set(i, interval1);
intervals.set(j, null);
count++;
}
}
}
}
} while (count != 0);
ArrayList<Interval> ret = new ArrayList<Interval>();
for (Interval item : intervals) {
if (item != null) {
ret.add(item);
}
}
return ret;
}
private Interval merge(Interval interval1, Interval interval2) {
return new Interval(Math.min(interval1.start, interval2.start), Math.max(interval1.end, interval2.end));
}
private boolean check(Interval interval1, Interval interval2) {
return !(interval1.end < interval2.start || interval1.start > interval2.end);
}
}