力扣题解2332

大家好,欢迎来到无限大的频道。

今日继续给大家带来力扣题解。

题目描述(中等)​:

坐上公交的最晚时间

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

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

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

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

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

​解题思路:

  1. 排序:

    • 首先,对 buses 和 passengers 数组进行排序。这样可以确保我们按照时间顺序处理公交车和乘客。

  2. 模拟乘客上车:

    • 对于每辆公交车,初始化 space 为 capacity。

    • 使用一个 while 循环,让乘客按顺序上车,直到公交车坐满或者没有乘客能在此时刻之前到达。

    • 每次乘客上车后,减少 space,并增加 pos。

    • 使用两个变量:pos 跟踪当前处理的乘客,space 表示当前公交车上剩余的座位数。

    • 遍历每一辆公交车:

  3. 计算最晚到达时间:

    • 在所有公交车处理完后,pos 指向最后一个已经上车的乘客的下一个位置。

    • 如果最后一辆公交车还有空位(space > 0),则你可以在最后一辆公交车的出发时间到达。

    • 如果没有空位,则你需要在最后一个乘客到达之前到达,因此 lastCatchTime 初始为 passengers[pos - 1]。

  4. 调整到达时间:

    • 确保 lastCatchTime 不与任何乘客的到达时间相同,通过减少 lastCatchTime,直到它与任何乘客的到达时间不冲突。

代码参考​:

int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b);
}
​
int latestTimeCatchTheBus(int* buses, int busesSize, int* passengers, int passengersSize, int capacity) {qsort(buses, busesSize, sizeof(int), compare);qsort(passengers, passengersSize, sizeof(int), compare);int pos = 0;int space = 0;
​for (int i = 0; i < busesSize; i++) {int arrive = buses[i];space = capacity;while (space > 0 && pos < passengersSize && passengers[pos] <= arrive) {space--;pos++;}}
​pos--;int lastCatchTime = space > 0 ? buses[busesSize - 1] : passengers[pos];while (pos >= 0 && passengers[pos] == lastCatchTime) {pos--;lastCatchTime--;}
​return lastCatchTime;
}

时间复杂度​:

  • 排序:排序 buses 和 passengers 的时间复杂度分别是 O(n log n) 和 O(m log m),其中 n 是公交车数量,m 是乘客数量。

  • 乘客上车模拟:遍历每辆公交车和每个乘客的过程是 O(n + m)。

  • 调整到达时间:在最坏情况下,可能需要遍历所有乘客来调整 lastCatchTime,这个过程是 O(m)。

因此,总的时间复杂度为 O(n log n + m log m),因为排序操作是最耗时的部分。

空间复杂度:

  • 代码中没有使用额外的数组或复杂的数据结构,除了输入数组和一些常数空间的变量之外,没有额外的空间开销。

  • 因此,空间复杂度为 O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1538662.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

算法题——最小会议室数量

题目1: 1.假定会议时间从凌晨零点开始&#xff0c;即 0<si<ei<1440&#xff0c;si和ei代表当天某一时刻从零点开始计算的开始和结束分钟数&#xff0c;如[90,360]&#xff0c;表示会议时间从1:30到6:00。 2.不考虑房间的容量问题&#xff0c;并且公司为了提升大家的体…

计算机组成原理-存储系统(二)半导体存储器

2.1DAM芯片 分类&#xff1a; DRAM芯片&#xff1a;使用栅极电容存储信息SRAM芯片&#xff1a;使用双稳态触发器存储信息 核心区别&#xff1a;储存元不一样 2.2DRAM和SRAM的比较 对于DRAM中&#xff1a; 1&#xff1a;电容内存储了电荷0&#xff1a;电容内未存储电荷 DR…

HTML讲解(一)body部分

目录 1.什么是HTML 2.HTML基本框架 3.标题声明 4.修改标题位置 5.段落声明 6.修改段落位置 7.超链接访问 8.图像访问 9.改变网页背景及文本颜色 10.添加网页背景图 11.超链接改变颜色 12.设置网页边距 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff…

Qt窗口——QMenuBar

文章目录 QMenuBar示例演示给菜单栏设置快捷键给菜单项设置快捷键添加子菜单添加分割线添加图标 QMenuBar Qt中采用QMenuBar来创建菜单栏&#xff0c;一个主窗口&#xff0c;只允许有一个菜单栏&#xff0c;位于主窗口的顶部、主窗口标题栏下面&#xff1b;一个菜单栏里面有多…

【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)

文章目录 【技术解析】消息中间件MQ&#xff1a;从原理到RabbitMQ实战(深入浅出)1.简介1.1 什么是消息中间件1.2 传统的http请求存在那些缺点1.3 Mq应用场景有那些1.4 为什么需要使用mq1.5 Mq与多线程之间区别1.6 Mq消息中间件名词1.7主流mq区别对比1.8 Mq设计基础知识 2.Rabbi…

python画图|3D bar进阶探索

前述学习过程只能怪&#xff0c;已经探究了3D直方图的基础教程&#xff0c;详见下述链接&#xff1a; python画图|3D直方图基础教程-CSDN博客 实际上&#xff0c;基础文章直接进入了堆叠教程&#xff0c;相对来说基础的程度不够&#xff0c;因此有必要再次探索。 【1】官网教…

通信工程学习:什么是POS无源光分配器

POS&#xff1a;无源光分配器 POS&#xff08;Passive Optical Splitter&#xff0c;无源光分配器&#xff09;是无源光网络&#xff08;Passive Optical Network, PON&#xff09;中的一个重要组成部分&#xff0c;它位于光线路终端&#xff08;OLT&#xff09;和光网络单元&a…

基于图卷积网络的轻量化推荐模型(论文复现)

基于图卷积网络的轻量化推荐模型&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 概述 图卷积网络&#xff08;Graph Convolution Network&#xff0c;GCN&#xff09;已经广泛的应用于推荐系统&#xff0c;基于GCN的协同过滤算法&#xff08;例如…

【路径规划】人工势场(APF)、涡旋APF、安全APF和动态窗口方法在航点跟踪问题的比较

摘要 本研究比较了几种路径规划算法在航路点跟踪中的性能&#xff0c;包括传统的人工势场算法&#xff08;APF&#xff09;、涡旋人工势场&#xff08;VAPF&#xff09;、安全人工势场&#xff08;SAPF&#xff09;和动态窗口方法&#xff08;DWA&#xff09;。实验结果表明&a…

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm&#xff1a; 首先&#xff0c;访问JetBrains官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后&#xff0c;打开PyCharm。 创建新…

实战分享:我是如何挖到CSDN漏洞的?

文章目录 前言一、过程二、总结《Windows信息安全和网络攻防》——清华大学出版社 前言 CxxN是国内很出名的博客平台&#xff0c;用户量非常大&#xff0c;注册用户据说有1个亿&#xff1f;(官方写的)本次我发现的漏洞详情是可以通过用户的id直接获取用户完整的手机号&#xf…

如何创建和编辑抖音百科词条,不会的找我们代创建!

如何创建和编辑抖音百科词条&#xff0c;不会的找我们代创建&#xff01; 如何创建抖音百科个人词条&#xff0c;个人抖音百科的创建 #抖音百科 #百科 #推广 做过百度百科的老板们注意了&#xff0c;等一下别划走。 2024 年品宣新风口出现了&#xff0c;抖音百科正在替代百度…

金言问卷:国外问卷调查可以做吗?

国外问卷调查可不可以做&#xff1f; 金言问卷告诉你&#xff0c;答案是肯定可以的。接下来就给你讲讲为什么是肯定的答案。 首先&#xff0c;为什么是肯定可以做呢&#xff1f;因为国外问卷调查可以产生收益是真实的&#xff0c;像我们客户昨天193美元1350人民币&#xff0c…

Flutter Android Package调用python

操作步骤 一、创建一个Flutter Package 使用以下指令创建一个Flutter Package flutter create --templateplugin --platformsandroid,ios -a java flutter_package_python 二、修改android/build.gradle文件 在buildscript——>dependencies中添加以下内容 //导入Chaqu…

MySQL面试题--连续三天登录(困难)

一、准备工作 drop table if exists author_tb; CREATE TABLE author_tb (author_id int(10) NOT NULL,author_level int(10) NOT NULL,sex char(10) NOT NULL ); INSERT INTO author_tb VALUES(101, 6, m),(102, 1, f),(103, 1, m),(104, 3, m),(105, 4, f),(106…

Matlab 的.m 文件批量转成py文件

在工作中碰到了一个问题&#xff0c;需要将原来用matlab gui做出来的程序改为python程序&#xff0c;因为涉及到很多文件&#xff0c;所以在网上搜了搜有没有直接能转化的库。参考了【Matlab】一键Matlab代码转python代码详细教程_matlab2python-CSDN博客 这位博主提到的matla…

ReKep——李飞飞团队提出的新一代机器人操作方法:基于视觉语言模型和关键点约束

前言 由于工厂、车厂的任务需求场景非常明确&#xff0c;加之自今年年初以来&#xff0c;我司在机器人这个方向的持续大力度投入(包括南京、长沙两地机器人开发团队的先后组建)&#xff0c;使得近期我司七月接到了不少来自车厂/工厂的订单&#xff0c;比如柔性上料、物料分拣、…

自动泊车系统中的YOLOv8 pose关键点车位线检测

自动泊车系统中的YOLOv8关键点车位线检测技术解析 引言 随着智能驾驶技术的快速发展&#xff0c;自动泊车功能成为了现代汽车的重要组成部分。它不仅能够提高驾驶的安全性&#xff0c;还能在一定程度上解决城市停车难的问题。在自动泊车系统中&#xff0c;准确识别停车位的位置…

10年408考研真题-数据结构

23.[2010统考真题]若元素 a,b,c,d,e,f 依次进栈&#xff0c;允许进栈、退栈操作交替进行&#xff0c;但不允许连续3次进行退栈操作&#xff0c;不可能得到的出栈序列是(D)。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 解析&#xff1a;直接看D选项&#xff0c…

风力发电厂智能化转型5G工业路由器物联网应用解决方案

在风力发电厂的智能化转型过程中&#xff0c;5G工业路由器作为数据传输的高速通道&#xff0c;更是连接风电设备、传感器与云端智能平台的桥梁。通过5G的高带宽和低延迟特性&#xff0c;工业路由器能够实时传输海量的风电厂数据&#xff0c;包括但不限于风速、风向、发电机温度…