题目:天际线问题
题意:给定n个矩形,求形成的轮廓
解法一:分治,
求解 n 栋楼的天际线:
如果 n == 0:返回一个空列表
如果 n == 1:返回一栋楼的天际线
leftSkyline = 求解前 n/2 栋楼的天际线。
rightSkyline = 求解后 n/2 栋楼的天际线。
合并
解法二:扫描线法
使用扫描线,从左至右扫过。如果遇到左端点,将高度入堆,如果遇到右端点,则将高度从堆中删除。
使用 last 变量记录上一个转折点
/*
方法一:分治
*/
class Solution {
public:
vector<vector<int>> getSkyline(vector<vector<int>>& buildings) {
return getSkyline(buildings, 0, buildings.size());
}
vector<vector<int>> getSkyline(vector<vector<int>>& buildings, int left, int right) {
int n = right - left;
vector<vector<int>> res;
if (n == 0) return res;
if (n == 1) {