-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergeIntervals.java
More file actions
47 lines (42 loc) · 1.34 KB
/
MergeIntervals.java
File metadata and controls
47 lines (42 loc) · 1.34 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
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Stack;
/**
* 56. 合并区间
*/
public class MergeIntervals {
public int[][] merge(int[][] intervals) {
// 从小到大排序
LinkedList<LinkedList<Integer>> ll = new LinkedList<>();
Arrays.sort(intervals, (a,b) -> {
return a[0]-b[0];
});
Stack<Integer> stack = new Stack<>();
stack.push(intervals[0][0]);
stack.push(intervals[0][1]);
for(int i=1; i<intervals.length; i++){
if(intervals[i][0]<=stack.peek()){
int t = stack.pop();
stack.push(Math.max(t, intervals[i][1]));
}else{
LinkedList<Integer> temp = new LinkedList<>();
temp.addFirst(stack.pop());
temp.addFirst(stack.pop());
ll.add(temp);
stack.push(intervals[i][0]);
stack.push(intervals[i][1]);
}
}
LinkedList<Integer> temp = new LinkedList<>();
temp.addFirst(stack.pop());
temp.addFirst(stack.pop());
ll.add(temp);
int[][] res = new int[ll.size()][2];
for(int i=0; i<ll.size(); i++){
res[i][0] = ll.get(i).get(0);
res[i][1] = ll.get(i).get(1);
}
return res;
}
}