public class Solution {
public List<int[]> getSkyline(int[][] buildings) {
List<int[]> height = new ArrayList<int[]>();
List<int[]> result = new ArrayList<int[]>();
for (int[] tmp : buildings) {
height.add(new int[]{tmp[0], tmp[2]});
height.add(new int[]{tmp[1], -tmp[2]});
}
Collections.sort(height, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
if (o1[0] != o2[0]) {
return o1[0] - o2[0];
} else {
return o2[1] - o1[1];
}
}
});
Queue<Integer> queue = new PriorityQueue<Integer>(1, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
int pre = 0;
queue.offer(0);
for (int[] tmp : height) {
if (tmp[1] > 0) {
queue.offer(tmp[1]);
} else {
queue.remove(-tmp[1]);
}
int cur = queue.peek();
if (cur != pre) {
result.add(new int[]{tmp[0], cur});
pre = cur;
}
}
return result;
}
}