218. The Skyline Problem

class Solution {
public:
    vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {
        vector<pair<int, int>> res;
        priority_queue<pair<int, int>> liveBlg; // height, end of x
        int curr = 0, currX;

        while (curr < buildings.size() || !liveBlg.empty()) {
            if (liveBlg.empty() || curr < buildings.size() && liveBlg.top().second >= buildings[curr][0]) { // I was thinking about that we don't need "curr < buildings.size()" here because we just did "curr < buildings.size() || !liveBlg.empty()" in the last line; but when checking "||", if !liveBlg.empty().... 
                currX = buildings[curr][0];
                while (curr < buildings.size() && buildings[curr][0] == currX) {
                    liveBlg.emplace(buildings[curr][2], buildings[curr][1]);
                    curr++;
                }
            }
            else {
                currX = liveBlg.top().second;
                while (!liveBlg.empty() && liveBlg.top().second <= currX) liveBlg.pop();
            }
            int currH = liveBlg.empty() ? 0 : liveBlg.top().first;
            if (res.empty() || currH != res.back().second) res.emplace_back(currX, currH);
        }

        return res;
    }
};

results matching ""

    No results matching ""