Easy

题目描述

给你两个整数数组 startTimeendTime 以及一个整数 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.length
  • 1 <= startTime.length <= 100
  • 1 <= startTime[i] <= endTime[i] <= 1000
  • 1 <= queryTime <= 1000

提示:

  • 想象 startTime[i]endTime[i] 形成一个区间(即 [startTime[i], endTime[i]])。
  • 答案是 queryTime 在这些区间中出现的次数。

解题思路

这是一道简单的数组遍历题目。

解题思路:

题目要求我们找到在给定查询时间 queryTime 正在做作业的学生人数。对于每个学生 i,他们在时间区间 [startTime[i], endTime[i]] 内做作业。我们需要判断 queryTime 是否落在这个区间内。

核心判断条件是:startTime[i] <= queryTime <= endTime[i]

算法步骤:

  1. 初始化计数器 count = 0
  2. 遍历所有学生(即遍历 startTime 和 endTime 数组)
  3. 对于每个学生 i,检查是否满足 startTime[i] <= queryTime <= endTime[i]
  4. 如果满足条件,计数器加 1
  5. 返回最终计数结果

这是一个直观的线性扫描解法,时间复杂度为 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),只使用常数级额外空间存储计数器