ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

力扣第290场周赛T3T4

2022-04-24 13:01:15  阅读:183  来源: 互联网

标签:周赛 cnt int 矩阵 back 力扣 vector ans 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;
    }
};

标签:周赛,cnt,int,矩阵,back,力扣,vector,ans,T3T4
来源: https://www.cnblogs.com/Hfolsvh/p/16185205.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有