链接:
2251. 花期内花的数目
题意
n朵花,有n个花期,m个人在m个时间来,求每个时间有多少朵花
解:
通过差分确定一个时间段内的花数量
再通过离线查询(因为返回答案数组)进行记忆存储,只需要一次遍历
实际代码:
#include<bits/stdc++.h>
using namespace std;
vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& people)
{map<int,int>cf;for(const auto& flower:flowers){cf[flower[0]]++;cf[flower[1]+1]--;}vector<int>people_sort=people;sort(people_sort.begin(),people_sort.end());map<int,int>S2S;int num=0;auto it=cf.begin();for(auto p:people_sort){while(it!=cf.end() && it->first<=p){num+=it->second;it++;}S2S[p]=num;}vector<int>ans;for(auto p:people){ans.push_back(S2S[p]);}return ans;
}
限制:
1 <= flowers.length <= 5 * 104
flowers[i].length == 2
1 <= starti <= endi <= 109
1 <= people.length <= 5 * 104
1 <= people[i] <= 109