华为OD机试 - 路口等待时间(Java 新系统 200分)
华为OD机试 新系统 题库疯狂收录中刷题点这里专栏导读本专栏收录于《华为OD机试JAVA真题》。刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。一、题目描述十字路口的红绿灯分为东西向E/W和南北向S/N两组两组状态始终相反。东西向红灯亮 R 秒然后绿灯亮 G 秒不断循环南北向则相反——绿灯亮 R 秒然后红灯亮 G 秒。刚开始时0 秒东西方向是红灯南北方向是绿灯。红绿灯切换 0 无过渡期红灯结束时绿灯立即开始无需额外等待。车辆到达路口时遇到绿灯直接走通过路口需要 1 秒如遇到红灯停下来等。E/W/S/N 四个方向各有一条独立车道各自排队互不干扰而同向后车必须等前车走完才能走。求从第一辆车到达路口到最后一辆车完全离开共同花费多少秒和最后一辆离开的时间是第几秒。二、输入描述• 整数 R表示东西向红灯持续秒数对应南北向绿灯时长。• 整数 G表示东西向绿灯持续秒数对应南北向红灯时长。• 字符数组用大写字母表示车辆的来向列表E东向西W西向东S南向北N北向南。• 整形数组表示各车辆的到达时间。三、输出描述一维数组包含第一辆车到达路口到最后一辆车完全离开的总耗时以及最后一辆车离开的时间。补充说明保证车辆的来向数量和到达时刻数量相等且到达时刻按非递减顺序排列。取值范围• 1 ≤ R,G ≤ 60• 到达时刻 ≤ 100• 车辆数量 ≤ 100四、测试用例测试用例11、输入35E,S,W,N0,1,3,62、输出9,93、说明E0 到达东西向红灯 - 3 进入 - 4 离开S1 到达南北向绿灯 - 1 进入 - 2 离开W3 到达东西向绿灯 - 3 进入 - 4 离开N6 到达南北向红灯 - 8 进入 - 9 离开总耗时 9 - 0 9最后离开时间 9测试用例21、输入23E,E,S1,3,42、输出5,63、说明E11 到达等待到 2 - 3 离开E23 到达前车正好在 3 离开 - 3 进入 - 4 离开S 4 到达此时南北向红灯 - 5 进入 - 6 离开第一辆车在第 1 秒到达因此总耗时 6 - 1 5五、解题思路红绿灯按周期循环一个完整周期为 R G 秒。对于任意时刻 t通过 t % (R G) 判断当前处于周期中的哪个阶段E/W前 R 秒红灯后 G 秒绿灯。S/N前 R 秒绿灯后 G 秒红灯。记录四条车道的最早可用时间E、W、S、N 四个方向互不影响因此用长度为 4 的数组 laneFreeTime分别记录每个方向前一辆车完全离开的时间。依次处理每辆车当前车辆最早能准备通过的时间为max(车辆到达时间, 同方向前车离开时间)如果此时是绿灯立即进入如果是红灯则根据红绿灯周期直接计算下一次绿灯开始时间不用逐秒等待。计算离开时间车辆通过路口需要 1 秒因此离开时间 实际进入时间 1更新该方向车道的可用时间同时维护所有车辆中的最晚离开时间。计算最终答案总耗时 最后一辆车离开时间 - 第一辆车到达时间输出总耗时,最后离开时间六、Java算法源码publicclassOdTest{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);intRInteger.parseInt(scanner.nextLine().trim());intGInteger.parseInt(scanner.nextLine().trim());String[]directionTokensscanner.nextLine().trim().split(\\s*,\\s*);String[]timeTokensscanner.nextLine().trim().split(\\s*,\\s*);intndirectionTokens.length;char[]directionsnewchar[n];int[]arrivalsnewint[n];for(inti0;in;i){directions[i]directionTokens[i].charAt(0);arrivals[i]Integer.parseInt(timeTokens[i]);}int[]resultsolve(R,G,directions,arrivals);System.out.println(result[0],result[1]);}privatestaticint[]solve(intR,intG,char[]directions,int[]arrivals){/* * E、W、S、N 四个方向是四条独立车道。 * * laneFreeTime[i] 表示对应车道中 * 前一辆车完全离开路口的时间。 * * 0 - E * 1 - W * 2 - S * 3 - N */int[]laneFreeTimenewint[4];intfirstArrivalarrivals[0];intlastLeaveTimefirstArrival;for(inti0;idirections.length;i){chardirdirections[i];intlanegetLaneIndex(dir);/* * 当前车辆想进入路口必须同时满足 * * 1. 自己已经到达 * 2. 同车道的前一辆车已经完全离开。 * * 因此取二者最大值。 */intearliestStartMath.max(arrivals[i],laneFreeTime[lane]);/* * earliestStart 只是车辆最早可以尝试进入的时刻。 * * 如果此时为绿灯可以直接走 * 如果此时为红灯则直接计算下一次绿灯开始时刻。 * * 不需要一秒一秒进行模拟。 */intactualStartgetNextGreenTime(earliestStart,dir,R,G);/* * 车辆通过路口需要 1 秒。 * * 例如车辆在 t3 时进入 * 则在 t4 时完全离开。 * * 下一辆同向车辆从 t4 开始可以再次判断信号灯。 */intleaveTimeactualStart1;laneFreeTime[lane]leaveTime;lastLeaveTimeMath.max(lastLeaveTime,leaveTime);}/* * 第一项 * 从第一辆车到达到最后一辆车离开的总耗时。 * * 第二项 * 最后一辆车完全离开的绝对时间。 */returnnewint[]{lastLeaveTime-firstArrival,lastLeaveTime};}/** * 返回从 time 开始本方向第一次可以进入路口的绿灯时刻。 */privatestaticintgetNextGreenTime(inttime,chardir,intR,intG){intcycleRG;intphasetime%cycle;if(dirE||dirW){/* * 东西向 * * [0, R) 红灯 * [R, R G) 绿灯 */if(phaseR){// 当前还在红灯阶段跳到本周期绿灯开始。returntime(R-phase);}// 当前已经是绿灯。returntime;}else{/* * 南北向恰好相反 * * [0, R) 绿灯 * [R, R G) 红灯 */if(phaseR){// 当前就是绿灯。returntime;}/* * 当前处于红灯 * 需要等到本周期结束也就是下一周期开始。 */returntime(cycle-phase);}}/** * 将四个方向映射到四条独立车道。 */privatestaticintgetLaneIndex(chardir){switch(dir){caseE:return0;caseW:return1;caseS:return2;caseN:return3;default:thrownewIllegalArgumentException(非法方向: dir);}}}七、效果展示1、输入42E,E,E0,1,22、输出11,113、说明东西向0~4 红4~6 绿6~10 红10~12 绿车辆E14 - 5E25 - 6E36 时已经变红只能等到 10 - 11输出11,11下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 新系统 200分本专栏收录于《华为OD机试JAVA真题》。刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。

相关新闻

GitHub 10k+ Star:用自然语言描述系统,AI 帮你生成可交互架构图

GitHub 10k+ Star:用自然语言描述系统,AI 帮你生成可交互架构图

01|Archify是什么? PART| 自然语言画系统架构图 描述一句话:"画出登录流程:Browser → Web App → API → JWT 验证 → Redis Session → PostgreSQL 兜底" 然后你得到的不是一张图片,而是…

2026/10/28 22:31:30 阅读更多 →
企业碳足迹核算从 0 到 1:openLCA 开源 LCA 工具落地指南

企业碳足迹核算从 0 到 1:openLCA 开源 LCA 工具落地指南

企业碳足迹核算从 0 到 1:openLCA 开源 LCA 工具落地指南 【免费下载链接】olca-app Source code of openLCA 项目地址: https://gitcode.com/gh_mirrors/ol/olca-app 当商业 LCA 软件的年许可费动辄数十万元、供应商数据却还躺在 Excel 里时,ope…

2026/10/28 11:09:18 阅读更多 →
pentaho-kettle数据迁移实战:一次凌晨事故后,我总结出的7个保命习惯

pentaho-kettle数据迁移实战:一次凌晨事故后,我总结出的7个保命习惯

pentaho-kettle数据迁移实战:一次凌晨事故后,我总结出的7个保命习惯 【免费下载链接】pentaho-kettle Pentaho Data Integration ( ETL ) a.k.a Kettle 项目地址: https://gitcode.com/gh_mirrors/pe/pentaho-kettle 凌晨两点,监控群炸…

2026/10/25 6:24:24 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/28 22:10:30 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 16:58:40 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 19:25:09 阅读更多 →