LeetCode.S1450.在既定时间做作业的学生人数

LeetCode.S1450

题目:

在这里插入图片描述

题目大意:

​ 如图所示。

数据范围:

startTime.length == endTime.length
1 <= startTime.length <= 100
1 <= startTime[i] <= endTime[i] <= 1000
1 <= queryTime <= 1000

思路:

​ 使用差分数组(待更新)。更新start到end中的前缀和的值。我们在使f[start] += 1, f[end + 1] -= 1,相当于在f的前缀和数组s中start到end这个区间的值都加了1,而剩余区间的值不变。最后求一下f的前缀和数组s即可,则s[query]就是我们要求的值。

代码:

class Solution {
    public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
        int[] f = new int[1010];
        for (int i = 0; i < startTime.length; i ++ ){
            f[startTime[i]] += 1;
            f[endTime[i] + 1] -= 1;
        }
        for (int i = 1; i < 1010; i ++ ){
            f[i] += f[i - 1];
        }
        return f[queryTime];
    }
}
public class Main {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] startTime = new int[]{9,8,7,6,5,4,3,2,1}, endTime = new int[]{10,10,10,10,10,10,10,10,10};
        int queryTime = 5;
        System.out.println(solution.busyStudent(startTime, endTime, queryTime));
    }
}

时空复杂度分析等:

  • 时间复杂度 : O(n)

  • 空间复杂度 : O(n)

题目链接:

1450. 在既定时间做作业的学生人数 - 力扣(LeetCode)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值