题意:轮廓问题,不好描述。
首先怎么分:
- 不停对半分
- 停止条件1:为空时,直接返回空
- 停止条件2:大小为1时,直接返回左上角点和右下角点。
那么怎么合并?
- 维护两个变量:l,r l为左半部分当前位置,r为右半部分当前位置
- 维护两个变量:h1,h2 h1表示左半部分当前位置高度,h2表示右半部分档期位置高度
- 如果当前位置左半部分横坐标更小,就更新h1,从左半部分选元素;
- 如果当前位置右半部分横坐标更小,就更新h2,从右半部分选元素;
- 如果一样大,就更新h1,h2,从左(或右)半部分选元素
- 当向结果中插入点时,只有和结果中最后一个点高度不同的点才能插入到结果里,且一直使用高度max(h1,h2)。
- 当某一部分全部访问过后,就将另一部分(和结果中最后一个点高度不同的点)直接插入结果里。
#include <algorithm>
class Solution {
public:
vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {