跳至主要内容

218. 天际线问题

class Solution {
public:
    vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {
      
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> leftx;
        for (int i = 0; i < buildings.size(); i++)
        {
            vector<int> b = buildings[i];
            leftx.push(make_pair(b[0], i));
        }
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> rightx;
        for (int i = 0; i < buildings.size(); i++)
        {
            vector<int> b = buildings[i];
            rightx.push(make_pair(b[1], i));
        }

        map<int, int> h;

        int lasth = 0;
        int x = 0;

        vector<pair<int, int>> ret;

        while (!leftx.empty() || !rightx.empty())
        {
            int next = 0;
            if (!leftx.empty() && leftx.top().first <= rightx.top().first)
            {
                next = leftx.top().first;
            }
            else
            {
                next = rightx.top().first;
            }

            while (!leftx.empty() && leftx.top().first == next)
            {
                x = leftx.top().first;

                int index = leftx.top().second;
                leftx.pop();

                vector<int> b = buildings[index];
                h[index] = b[2];
            }

            while (!rightx.empty() && rightx.top().first == next)
            {
                x = rightx.top().first;
                int index = rightx.top().second;
                rightx.pop();

                h.erase(index);
            }

            int curh = 0;
            if (!h.empty())
            {
                int max = -1;
                for (map<int, int>::iterator it = h.begin(); it!=h.end();it++)
                {
                    if (it->second > max)
                    {
                        max = it->second;
                    }
                }
                curh = max;
            }

            if (curh != lasth)
            {
                lasth = curh;
                ret.push_back(make_pair(x, curh));
            }
        }

        return ret;
    }
};

评论

此博客中的热门博文

老毛子路由器无线桥接问题

  信道带宽:改成20M  关闭 DHCP 服务器  关闭动态 (DHCP) 路由 修改IP地址从192.168.123.1到192.168.1.114  无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择LAN bridge 连上上级wifi done 路由器自身可能上不去网,执行: route add default  gw 192.168.1.1 不过这种方式无法翻墙 ////////////////////////////////////////////////////////////// 第二种方式 不改信道不关闭DHCP,保持网段是192.168.123.1 无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择WAN 连上上级wifi done 路由器可以翻墙,但是192.168.1.1的机器访问不了192.168.123.1的机器 解决方法: 在192.168.123.1的机器把想要访问的机器比如192.168.123.100设置DMZ主机,这样就可以访问了,在 192.168.1.1能看到分配的ip比如192.168.1.115