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

模拟+分类讨论,LeetCode 2332. 坐上公交的最晚时间

一、题目

1、题目描述

给你一个下标从 0 开始长度为 n 的整数数组 buses ,其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一个下标从 0 开始长度为 m 的整数数组 passengers ,其中 passengers[j] 表示第 j 位乘客的到达时间。所有公交车出发的时间互不相同,所有乘客到达的时间也互不相同。

给你一个整数 capacity ,表示每辆公交车 最多 能容纳的乘客数目。

每位乘客都会搭乘下一辆有座位的公交车。如果你在 y 时刻到达,公交在 x 时刻出发,满足 y <= x  且公交没有满,那么你可以搭乘这一辆公交。最早 到达的乘客优先上车。

返回你可以搭乘公交车的最晚到达公交站时间。你 不能 跟别的乘客同时刻到达。

注意:数组 buses 和 passengers 不一定是有序的。

2、接口描述

python3
 ​
class Solution:def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
cpp
 ​
class Solution {
public:int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {}
};
C#
 ​
public class Solution {public int LatestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) {}
}

3、原题链接

2332. The Latest Time to Catch a Bus


二、解题报告

1、思路分析

将车 和 乘客都升序排序

随着来的乘客越来越晚,其能登上的车也就越靠后

考虑双指针

遍历每个车,维护一个乘客指针,只要当前乘客能上车就后移

结束后,如果最后一个车没满,那么从最后一个车的发车时间往前倒推,找到一个空闲时间点

否则,从最后一个上车的乘客往前倒推,找到一个空闲时间点

由于最多倒推 len(p[assengers) 次,所以可行

2、复杂度

时间复杂度: O(nlogn + mlogn)空间复杂度:O(1)

3、代码详解

python3
 ​
class Solution:def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:buses.sort()passengers.sort()cur = cnt = 0for x in buses:cnt = capacitywhile cur < len(passengers) and cnt and x >= passengers[cur]:cur += 1cnt -= 1cur -= 1res = buses[-1] if cnt else passengers[cur]while cur >= 0 and res == passengers[cur]:res -= 1cur -= 1return res
cpp
 ​
class Solution {
public:int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {std::ranges::sort(buses), std::ranges::sort(passengers);int cnt = capacity, cur = 0;for (int x : buses) {cnt = capacity;while (cur < passengers.size() && cnt > 0 && x >= passengers[cur])++cur, --cnt;}--cur;int res = cnt > 0 ? buses.back() : passengers[cur];while (cur >= 0 && res == passengers[cur]){--res;--cur;}return res;}
};
C#
 ​
public class Solution
{public int LatestTimeCatchTheBus(int[] buses, int[] passengers, int capacity){Array.Sort(buses);Array.Sort(passengers);int cur = 0, cnt = 0;foreach(int x in buses){cnt = capacity;while (cur < passengers.Length && cnt > 0 && x >= passengers[cur]){++cur;--cnt;}}--cur;int res = cnt > 0 ? buses[buses.Length - 1] : passengers[cur];while (cur >= 0 && res == passengers[cur]){--res;--cur;}return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前后端分离Vue美容店会员信息管理系统o7grs
  • Kubernetes中pod版本回滚相关的命令?
  • ant-design表格自动合并相同内容的单元格
  • 路由原理介绍
  • Springboot错误日志切面,找到post请求体被消费后的数据
  • Unity-Transform类-缩放和看向
  • CTFHub技能树-信息泄露-HG泄漏
  • linux-硬件与设备管理-硬件信息查看
  • 信息安全工程师(6)网络信息安全现状与问题
  • TI AM62X Secure Boot 流程简述
  • Python计算机视觉第十章-OpenCV
  • 开源项目 face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet
  • [mysql]mysql排序和分页
  • 9.18 微信小程序开发笔记
  • vue-ts-demo
  • Apache的基本使用
  • FastReport在线报表设计器工作原理
  • Git 使用集
  • JAVA 学习IO流
  • js写一个简单的选项卡
  • Mysql5.6主从复制
  • select2 取值 遍历 设置默认值
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Swift 中的尾递归和蹦床
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 聊聊redis的数据结构的应用
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端临床手札——文件上传
  • 前端之Sass/Scss实战笔记
  • 如何在 Tornado 中实现 Middleware
  • 设计模式(12)迭代器模式(讲解+应用)
  • 学习使用ExpressJS 4.0中的新Router
  • 以太坊客户端Geth命令参数详解
  • 主流的CSS水平和垂直居中技术大全
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 阿里云API、SDK和CLI应用实践方案
  • 说说我为什么看好Spring Cloud Alibaba
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #前后端分离# 头条发布系统
  • $$$$GB2312-80区位编码表$$$$
  • (1)(1.11) SiK Radio v2(一)
  • (1)SpringCloud 整合Python
  • (27)4.8 习题课
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (第一天)包装对象、作用域、创建对象
  • (二)测试工具
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三)uboot源码分析
  • (转)关于pipe()的详细解析
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET 事件模型教程(二)