Easy
题目描述
给你两个整数数组 startTime 和 endTime 以及一个整数 queryTime。
第 i 名学生在时间 startTime[i] 开始做作业,在时间 endTime[i] 完成作业。
请返回在时间 queryTime 正在做作业的学生人数。更正式地说,返回在时间区间 [startTime[i], endTime[i]](包含边界)内包含 queryTime 的学生人数。
示例 1:
输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4
输出:1
解释:我们有 3 名学生:
第一名学生在时间 1 开始做作业,在时间 3 完成作业,在时间 4 没有做作业。
第二名学生在时间 2 开始做作业,在时间 2 完成作业,在时间 4 没有做作业。
第三名学生在时间 3 开始做作业,在时间 7 完成作业,是在时间 4 唯一正在做作业的学生。
示例 2:
输入:startTime = [4], endTime = [4], queryTime = 4
输出:1
解释:唯一的学生在 queryTime 时正在做作业。
约束:
startTime.length == endTime.length1 <= startTime.length <= 1001 <= startTime[i] <= endTime[i] <= 10001 <= queryTime <= 1000
提示:
- 想象
startTime[i]和endTime[i]形成一个区间(即[startTime[i], endTime[i]])。 - 答案是
queryTime在这些区间中出现的次数。
解题思路
这是一道简单的数组遍历题目。
解题思路:
题目要求我们找到在给定查询时间 queryTime 正在做作业的学生人数。对于每个学生 i,他们在时间区间 [startTime[i], endTime[i]] 内做作业。我们需要判断 queryTime 是否落在这个区间内。
核心判断条件是:startTime[i] <= queryTime <= endTime[i]
算法步骤:
- 初始化计数器
count = 0 - 遍历所有学生(即遍历 startTime 和 endTime 数组)
- 对于每个学生
i,检查是否满足startTime[i] <= queryTime <= endTime[i] - 如果满足条件,计数器加 1
- 返回最终计数结果
这是一个直观的线性扫描解法,时间复杂度为 O(n),空间复杂度为 O(1)。由于数组长度最多为 100,性能完全足够。
推荐解法: 直接遍历法,简单高效,代码清晰易懂。
代码实现
class Solution {
public:
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
int count = 0;
for (int i = 0; i < startTime.size(); i++) {
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
count++;
}
}
return count;
}
};
class Solution:
def busyStudent(self, startTime: List[int], endTime: List[int], queryTime: int) -> int:
count = 0
for i in range(len(startTime)):
if startTime[i] <= queryTime <= endTime[i]:
count += 1
return count
public class Solution {
public int BusyStudent(int[] startTime, int[] endTime, int queryTime) {
int count = 0;
for (int i = 0; i < startTime.Length; i++) {
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
count++;
}
}
return count;
}
}
var busyStudent = function(startTime, endTime, queryTime) {
let count = 0;
for (let i = 0; i < startTime.length; i++) {
if (startTime[i] <= queryTime && queryTime <= endTime[i]) {
count++;
}
}
return count;
};
复杂度分析
| 复杂度 | 分析 |
|---|---|
| 时间复杂度 | O(n),其中 n 是学生数量,需要遍历所有学生一次 |
| 空间复杂度 | O(1),只使用常数级额外空间存储计数器 |