问题描述:
- 给定两个整数数组
startTime
(开始时间)和endTime
(结束时间),并指定一个整数queryTime
作为查询时间。- 已知,第
i
名学生在startTime[i]
时开始写作业并于endTime[i]
时完成作业,返回在查询时间queryTime
时正在做作业的学生人数。
- 已知,第
核心思路:
- 简单题,直接同时遍历两个数组,判断
queryTime
是否处在startTime
和endTime
之间即可。 - 该题是区间问题,也可以用差分数组、线段树、树状数组的思想来解决,但没有必要。
代码实现:
- 枚举解法代码实现如下:
class Solution { public: int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) { int cnt = 0; for(int i = 0; i < startTime.size(); ++i) { if(startTime[i] <= queryTime and endTime[i] >= queryTime) ++cnt; } return cnt; } };
- 差分解法代码实现如下:
class Solution { public: int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) { map<int, int> mapped; for(int i = 0; i < startTime.size(); ++i) ++mapped[startTime[i]], --mapped[endTime[i]+1]; int cur = 0; for(auto& [a, b] : mapped) { if(a > queryTime) break; cur += b; } return cur; } };