当前位置: 首页 > news >正文

Acwing 503. 借教室

Problem: 503. 借教室

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个二分查找问题。我们需要找到最大的借教室数量,使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。

解题方法

我们首先对所有的借教室请求按照结束时间进行排序。然后我们使用二分查找来找到最大的借教室数量。对于每个借教室数量,我们检查是否所有的教室都可以在其可用时间内完成借用。我们使用一个差分数组来记录每个教室的借用时间。对于每个借教室请求,我们在其开始时间处加上借用时间,然后在其结束时间后一天减去借用时间。然后我们从前到后累加差分数组,如果某一天的累加值超过了教室的可用时间,那么这个借教室数量就不可行。

复杂度

时间复杂度:

O ( n l o g n ) O(n log n) O(nlogn),其中 n 是借教室请求的数量。我们需要对所有的请求进行排序,然后对每个可能的借教室数量进行检查。

空间复杂度:

O ( n ) O(n) O(n),我们需要使用一个差分数组来记录每个教室的借用时间。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) 1e6 + 10;static int[] w = new int[MAXN];static long[] dif = new long[MAXN];static int[][] rent = new int[MAXN][3];static int n, m;public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();for (int i = 1; i <= n; i++) {w[i] = nextInt();}for (int i = 1; i <= m; i++) {rent[i][2] = nextInt();rent[i][0] = nextInt();rent[i][1] = nextInt();}int l = 0, r = m;while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) {l = mid;} else {r = mid - 1;}}if (r == m) {out.println(0);} else {out.println(-1);out.println(r + 1);}out.flush();}private static boolean check(int mid) {// TODO Auto-generated method stubArrays.fill(dif, 0);for(int i = 1; i <= mid; i++) {dif[rent[i][0]] += rent[i][2];dif[rent[i][1] + 1] -= rent[i][2];}for(int i = 1; i <= n; i++) {dif[i] += dif[i - 1];if(dif[i] > w[i]) {return false;}}return true;}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}
http://www.lryc.cn/news/325529.html

相关文章:

  • 吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5
  • Linux设备驱动开发 - 三色LED呼吸灯分析
  • 开发者的瑞士军刀:DevToys
  • 【vue3.0】实现导出的PDF文件内容是红头文件格式
  • 【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)
  • docker学习笔记 三-----docker安装部署
  • FastAPI+React全栈开发02 什么是FARM技术栈
  • C#程序结构详解
  • linux 清理空间
  • C语言:给结构体取别名的4种方法
  • 今天聊聊Docker
  • 【C语言】结构体
  • Git基础(24):分支回退
  • 复试专业前沿问题问答合集1
  • C++标准库中提供的用于处理正则表达式的类std::regex
  • .NET Core 服务实现监控可观测性最佳实践
  • AI基础知识扫盲
  • 分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
  • Prompt-RAG:在特定领域中应用的革新性无需向量嵌入的RAG技术
  • 线性代数 - 应该学啥 以及哪些可以交给计算机
  • 力扣面试150 Pow(x, n) 快速幂 负指数
  • 连接navicat报错2059 解决办法
  • Unity-UGUI系统
  • 配置AC和AP上报KPI指标信息实验
  • 深度学习Trick
  • c++顺序表(连续插入删除)
  • [综述笔记]A Survey on Deep Learning for Neuroimaging-Based Brain Disorder Analysis
  • 【C++练级之路】【Lv.16】红黑树(冰与火的碰撞,红与黑的史诗)
  • 政安晨:【Keras机器学习实践要点】(三)—— 编写组件与训练数据
  • 数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅲ)