力扣第290场周赛T3T4

t3.统计包含每个点的矩阵数目

题意

给定一些矩阵和一些点,计算每个点被多少个矩阵包含着

思路

题目中矩阵的高度范围是1~100,因此,将每个高度对应的矩阵宽度存下来,排序。枚举每个点,每个点枚举高度比它大的,然后在每个高度中二分宽度,找到第一个大于点的宽度。
找到每个高度有多少个矩阵可以包含点,每个高度得到的结果相加,就是该点被包含的矩阵的数量。

代码

class Solution {
public:
    vector<int> countRectangles(vector<vector<int>>& rectangles, vector<vector<int>>& points) {
        
        vector<int> h[110];
        for(auto re : rectangles)
            h[re[1]].push_back(re[0]);
        for(int i = 1; i <= 100; i ++ )
            sort(h[i].begin(), h[i].end());
        
        vector<int> ans;
        
        for(auto point : points)
        {
            int x = point[0], y = point[1];
            int cnt = 0;
            for(int i = y; i <= 100; i ++ )
            {
                if(h[i].size() == 0)    continue;
                int l = 0, r = h[i].size() - 1;
                while(l < r)
                {
                    int mid = l + r >> 1;
                    if(h[i][mid] >= x)  r = mid;
                    else    l = mid + 1;
                }
                if(h[i][l] >= x)    cnt += h[i].size() - 1 - l + 1;
            }
            ans.push_back(cnt);
        }
        return ans;
    }
};

t4.花期内花的数目

题意

每朵花有一段花期,每个人在一个时间点看花,能看到几朵花。

思路

根据差分的思想,可以在花期[start, end],在start处加一,在end+1处减一,在人的时间点上,计算在该时间之前有多少花已经开了,有多少花已经谢了。

代码

class Solution {
public:
    vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& persons) {
        vector<pair<int, int>> a;
        vector<int> ans(persons.size());

        for(auto f : flowers)
        {
            a.push_back({f[0], 1});   // 花期开始+1
            a.push_back({f[1] + 1, -1});  // 花期结束-1
        }
        for(int i = 0; i < persons.size(); i ++ )
            a.push_back({persons[i], i + 50010}); 
        sort(a.begin(), a.end());

        int cnt = 0;
        for(auto p : a)
        {
            int x = p.first, y = p.second;
            if(y != 1 && y != -1)   // 查询
                ans[y - 50010] = cnt;
            else    cnt += y;
        }
        return ans;
    }
};
posted @ 2022-04-24 12:53  inss!w!  阅读(32)  评论(0编辑  收藏  举报