|
13 | 13 | * Interval(int s, int e) { start = s; end = e; } |
14 | 14 | * } |
15 | 15 | */ |
16 | | -public class MergeIntervals { |
| 16 | +class MergeIntervals { |
17 | 17 | public List<Interval> merge(List<Interval> intervals) { |
18 | | - if(intervals.size() <= 1) { |
19 | | - return intervals; |
| 18 | + List<Interval> result = new ArrayList<Interval>(); |
| 19 | + if(intervals == null || intervals.size() == 0) { |
| 20 | + return result; |
20 | 21 | } |
21 | 22 |
|
22 | | - // Sort by ascending starting point using an anonymous Comparator |
23 | | - Collections.sort(intervals, new Comparator<Interval>() { |
24 | | - @Override |
25 | | - public int compare(Interval i1, Interval i2) { |
26 | | - return Integer.compare(i1.start, i2.start); |
27 | | - } |
| 23 | + Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]); |
| 24 | + Arrays.sort(allIntervals, new Comparator<Interval>() { |
| 25 | + public int compare(Interval a, Interval b) { |
| 26 | + if(a.start == b.start) { |
| 27 | + return a.end - b.end; |
| 28 | + } |
| 29 | + return a.start - b.start; |
| 30 | + } |
28 | 31 | }); |
29 | 32 |
|
30 | | - List<Interval> result = new ArrayList<Interval>(); |
31 | | - |
32 | | - int start = intervals.get(0).start; |
33 | | - int end = intervals.get(0).end; |
34 | | - |
35 | | - for(Interval interval : intervals) { |
36 | | - if(interval.start <= end) { |
37 | | - end = Math.max(end, interval.end); |
| 33 | + for(Interval i: allIntervals) { |
| 34 | + if (result.size() == 0 || result.get(result.size() - 1).end < i.start) { |
| 35 | + result.add(i); |
38 | 36 | } else { |
39 | | - result.add(new Interval(start, end)); |
40 | | - start = interval.start; |
41 | | - end = interval.end; |
| 37 | + result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end); |
42 | 38 | } |
43 | 39 | } |
44 | 40 |
|
45 | | - result.add(new Interval(start, end)); |
46 | | - |
47 | 41 | return result; |
48 | 42 | } |
49 | 43 | } |
0 commit comments