尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

1279. 红绿灯路口

1279. 红绿灯路口
📅 发布时间:2026/6/20 16:06:58

1279. 红绿灯路口

题目描述

这是两条路的交叉路口。第一条路是 A 路,车辆可沿 1 号方向由北向南行驶,也可沿 2 号方向由南向北行驶。第二条路是 B 路,车辆可沿 3 号方向由西向东行驶,也可沿 4 号方向由东向西行驶。

每条路在路口前都有一个红绿灯。红绿灯可以亮起红灯或绿灯。

  1. 绿灯表示两个方向的车辆都可通过路口。
  2. 红灯表示两个方向的车辆都不可以通过路口,必须等待绿灯亮起。

两条路上的红绿灯不可以同时为绿灯。这意味着,当 A 路上的绿灯亮起时,B 路上的红灯会亮起;当 B 路上的绿灯亮起时,A 路上的红灯会亮起.

开始时,A 路上的绿灯亮起,B 路上的红灯亮起。当一条路上的绿灯亮起时,所有车辆都可以从任意两个方向通过路口,直到另一条路上的绿灯亮起。不同路上的车辆不可以同时通过路口。

给这个路口设计一个没有死锁的红绿灯控制系统。

实现函数 void carArrived(carId, roadId, direction, turnGreen, crossCar) :

  • carId 为到达车辆的编号。
  • roadId 为车辆所在道路的编号。
  • direction 为车辆的行进方向。
  • turnGreen 是一个函数,调用此函数会使当前道路上的绿灯亮起。
  • crossCar 是一个函数,调用此函数会允许车辆通过路口。

当你的答案避免了车辆在路口出现死锁,此答案会被认定为正确的。当路口已经亮起绿灯时仍打开绿灯,此答案会被认定为错误的。

 

示例 1:

输入: cars = [1,3,5,2,4], directions = [2,1,2,4,3], arrivalTimes = [10,20,30,40,50]
输出: [
"Car 1 Has Passed Road A In Direction 2",    // A 路上的红绿灯为绿色,1 号车可通过路口。
"Car 3 Has Passed Road A In Direction 1",    // 红绿灯仍为绿色,3 号车通过路口。
"Car 5 Has Passed Road A In Direction 2",    // 红绿灯仍为绿色,5 号车通过路口。
"Traffic Light On Road B Is Green",          // 2 号车在 B 路请求绿灯。
"Car 2 Has Passed Road B In Direction 4",    // B 路上的绿灯现已亮起,2 号车通过路口。
"Car 4 Has Passed Road B In Direction 3"     // 红绿灯仍为绿色,4 号车通过路口。
]

示例 2:

输入: cars = [1,2,3,4,5], directions = [2,4,3,3,1], arrivalTimes = [10,20,30,40,40]
输出: [
"Car 1 Has Passed Road A In Direction 2",    // A 路上的红绿灯为绿色,1 号车可通过路口。
"Traffic Light On Road B Is Green",          // 2 号车在 B 路请求绿灯。
"Car 2 Has Passed Road B In Direction 4",    // B 路上的绿灯现已亮起,2 号车通过路口。
"Car 3 Has Passed Road B In Direction 3",    // B 路上的绿灯现已亮起,3 号车通过路口。
"Traffic Light On Road A Is Green",          // 5 号车在 A 路请求绿灯。
"Car 5 Has Passed Road A In Direction 1",    // A 路上的绿灯现已亮起,5 号车通过路口。
"Traffic Light On Road B Is Green",          // 4 号车在 B 路请求绿灯。4 号车在路口等灯,直到 5 号车通过路口,B 路的绿灯亮起。
"Car 4 Has Passed Road B In Direction 3"     // B 路上的绿灯现已亮起,4 号车通过路口。
]
解释: 这是一个无死锁的方案。注意,在 A 路上的绿灯亮起、5 号车通过前让 4 号车通过,也是一个正确且可被接受的方案。

 

提示:

  • 1 <= cars.length <= 20
  • cars.length = directions.length
  • cars.length = arrivalTimes.length
  • cars 中的所有值都是唯一的。
  • 1 <= directions[i] <= 4
  • arrivalTimes 是非递减的。

解法

JAVA

import java.util.concurrent.locks.*;public class TrafficLight {private final Lock lock = new ReentrantLock();// 当前绿灯的道路(1 表示路 A,2 表示路 B)private int currentGreenRoad = 1;public TrafficLight() {// 默认路 A 为绿灯}public void carArrived(int carId,int roadId,int direction,Runnable turnGreen,Runnable crossCar) {lock.lock(); // 手动加锁try {// 如果当前绿灯不是这条路,就切换if (currentGreenRoad != roadId) {turnGreen.run();currentGreenRoad = roadId;}// 当前车可以通行crossCar.run();} finally {lock.unlock(); // 确保一定会释放锁}}
}
加油啦!加油鸭,冲鸭!!!

相关新闻

  • python概念详解
  • 用户消费行为数据分析(随笔)
  • 「LG6596-How Many of Them」题解

最新新闻

  • 2026青岛门窗选购权威指南:五大技术派源头工厂深度实测与年度甄选榜单 - GrowthUME
  • 英语阅读_Natural disasters can strike anywhere at any time
  • 淮安小规模、一般纳税人代理记账多少钱?2026年6月淮安代账收费明细与避坑指南 - 山沟沟的小娃娃
  • 北京怀柔刑事律所推荐:怎样挑选本地靠谱刑事辩护机构 - 品牌2026
  • LoRA微调实战:LLaMA 3低成本云端微调全流程
  • P4363 [九省联考 2018] 一双木棋 chess

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号