Skip to content

Commit 431e78f

Browse files
committed
merge-intervals
1 parent 37fb6e2 commit 431e78f

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

merge-intervals/chjung99.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
class Solution {
2+
public int[][] merge(int[][] intervals) {
3+
//sort by start_i
4+
List<Interval> ordered = new ArrayList<>();
5+
for (int i = 0; i < intervals.length; i++){
6+
ordered.add(new Interval(intervals[i]));
7+
}
8+
Collections.sort(ordered);
9+
10+
Deque<Interval> queue = new ArrayDeque<>();
11+
queue.add(ordered.get(0));
12+
//merge in order
13+
for (int i = 1; i < ordered.size(); i++) {
14+
Interval tail = queue.removeLast();
15+
Interval cur = ordered.get(i);
16+
17+
if (tail.end >= cur.start){
18+
Interval merged = new Interval(new int[]{Math.min(tail.start, cur.start), Math.max(tail.end, cur.end)});
19+
queue.add(merged);
20+
} else{
21+
queue.add(tail);
22+
queue.add(cur);
23+
}
24+
}
25+
int[][] answer = new int[queue.size()][2];
26+
int idx = 0;
27+
while (!queue.isEmpty()){
28+
answer[idx++] = queue.removeFirst().raw;
29+
}
30+
return answer;
31+
}
32+
class Interval implements Comparable<Interval>{
33+
int[] raw;
34+
int start;
35+
int end;
36+
37+
public Interval(int[] raw){
38+
this.raw = raw;
39+
this.start = raw[0];
40+
this.end = raw[1];
41+
}
42+
@Override
43+
public int compareTo(Interval o){
44+
return Integer.compare(this.start, o.start);
45+
}
46+
}
47+
}
48+
49+

0 commit comments

Comments
 (0)