1
class height implements Comparable<height> {4
boolean isStart = false;6
height(int a, int b, boolean c) {12
public int compareTo(height h) {13
if (this.pos != h.pos) return this.pos - h.pos;14
if (isStart) return -1;15
if (h.isStart) return 1;17
return this.val - h.val;22
public List<List<Integer>> getSkyline(int[][] buildings) {24
PriorityQueue<height> mQ = new PriorityQueue<>();25
int len = buildings.length;26
for (int[] b : buildings) {27
mQ.add(new height(b[2], b[0], true));28
mQ.add(new height(b[2], b[1], false));30
PriorityQueue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder());33
List<List<Integer>> res = new ArrayList<>();35
while (mQ.size() > 0) {43
if (prevHeight != heap.peek()) {44
lst = new ArrayList<>();47
if (res.size() > 0 && res.get(res.size() - 1).get(0) == h.pos) {48
lst.add(Math.max(heap.peek(), res.get(res.size() - 1).get(1)));49
res.remove(res.size() - 1);50
} else lst.add(heap.peek());52
prevHeight = heap.peek();