当前位置:网站首页>LeetCode-1279. Traffic light intersection
LeetCode-1279. Traffic light intersection
2022-07-06 19:09:00 【Border wanderer】
This is the intersection of two roads . The first way is A road , The vehicle can move along 1 Heading from north to south , Can also be along 2 Heading from south to north . The second way is B road , The vehicle can move along 3 Drive from west to East in direction No , Can also be along 4 Drive from east to West in direction No .

Every road has a traffic light in front of the intersection . Traffic lights can be red or green .
The green light means that vehicles in both directions can pass the intersection .
The red light means that vehicles in both directions are not allowed to pass through the intersection , You must wait for the green light to come on .
Traffic lights on both roads cannot be green at the same time . It means , When A When the green light on the road comes on ,B The red light on the road will light up ; When B When the green light on the road comes on ,A The red light on the road will light up .
At the beginning of the ,A The green light on the road ,B The red light on the road is on . When the green light on a road lights up , All vehicles can pass through the intersection from any two directions , Until the green light on the other road . Vehicles on different roads cannot pass through the intersection at the same time .
Design a traffic light control system without deadlock for this intersection .
Implementation function void carArrived(carId, roadId, direction, turnGreen, crossCar) :
carId Is the number of the arriving vehicle .
roadId Is the number of the road where the vehicle is located .
direction For the direction of the vehicle .
turnGreen It's a function , Calling this function will cause the green light on the current road to light up .
crossCar It's a function , Calling this function will allow the vehicle to pass through the intersection .
When your answer avoids the deadlock of vehicles at the intersection , This answer will be considered correct . Turn on the green light when the green light has been on at the intersection , This answer will be considered wrong .
Example 1:
Input : cars = [1,3,5,2,4], directions = [2,1,2,4,3], arrivalTimes = [10,20,30,40,50]
Output : [
"Car 1 Has Passed Road A In Direction 2", // A The traffic lights on the road are green ,1 Car No. 1 can pass through the intersection .
"Car 3 Has Passed Road A In Direction 1", // The traffic lights are still green ,3 Car No. 2 goes through the intersection .
"Car 5 Has Passed Road A In Direction 2", // The traffic lights are still green ,5 Car No. 2 goes through the intersection .
"Traffic Light On Road B Is Green", // 2 Car number is B Road request green light .
"Car 2 Has Passed Road B In Direction 4", // B The green light on the road is now on ,2 Car No. 2 goes through the intersection .
"Car 4 Has Passed Road B In Direction 3" // The traffic lights are still green ,4 Car No. 2 goes through the intersection .
]
Example 2:
Input : cars = [1,2,3,4,5], directions = [2,4,3,3,1], arrivalTimes = [10,20,30,40,40]
Output : [
"Car 1 Has Passed Road A In Direction 2", // A The traffic lights on the road are green ,1 Car No. 1 can pass through the intersection .
"Traffic Light On Road B Is Green", // 2 Car number is B Road request green light .
"Car 2 Has Passed Road B In Direction 4", // B The green light on the road is now on ,2 Car No. 2 goes through the intersection .
"Car 3 Has Passed Road B In Direction 3", // B The green light on the road is now on ,3 Car No. 2 goes through the intersection .
"Traffic Light On Road A Is Green", // 5 Car number is A Road request green light .
"Car 5 Has Passed Road A In Direction 1", // A The green light on the road is now on ,5 Car No. 2 goes through the intersection .
"Traffic Light On Road B Is Green", // 4 Car number is B Road request green light .4 Car No. 1 is waiting for the light at the intersection , until 5 Car No. 2 goes through the intersection ,B The green light on the road is on .
"Car 4 Has Passed Road B In Direction 3" // B The green light on the road is now on ,4 Car No. 2 goes through the intersection .
]
explain : This is a deadlock free solution . Be careful , stay A The green light on the road 、5 Give way to... Before car No 4 Car No. 2 passed , It is also a correct and acceptable scheme .
Tips :
1 <= cars.length <= 20
cars.length = directions.length
cars.length = arrivalTimes.length
cars All values in are unique .
1 <= directions[i] <= 4
arrivalTimes Non decreasing .
#include<iostream>
#include<functional>
#include<mutex>
using namespace std;
class TrafficLight {
public:
TrafficLight() {
road = 'A';
}
void carArrived(
int carId, // ID of the car
int roadId, // ID of the road the car travels on. Can be 1 (road A) or 2 (road B)
int direction, // Direction of the car
function<void()> turnGreen, // Use turnGreen() to turn light to green on current road
function<void()> crossCar // Use crossCar() to make car cross the intersection
) {
std::lock_guard<mutex> lck(mtx);
if (direction <= 2 && road != 'A') {
turnGreen();
road = 'A';
}
else if(direction > 2 && road!='B') {
turnGreen();
road = 'B';
}
crossCar();
}
private:
char road = 'A';
std::mutex mtx;
};边栏推荐
- Simple understanding of MySQL database
- R语言ggplot2可视化时间序列柱形图:通过双色渐变配色颜色主题可视化时间序列柱形图
- AcWing 3537. Tree lookup complete binary tree
- Abstract classes and abstract methods
- On AAE
- 驼峰式与下划线命名规则(Camel case With hungarian notation)
- ROS custom message publishing subscription example
- 安装Mysql报错:Could not create or access the registry key needed for the...
- pytorch常见损失函数
- Xingnuochi technology's IPO was terminated: it was planned to raise 350million yuan, with an annual revenue of 367million yuan
猜你喜欢

RT-Thread 组件 FinSH 使用时遇到的问题

MRO industrial products enterprise procurement system: how to refine procurement collaborative management? Industrial products enterprises that want to upgrade must see!

AIRIOT物联网平台赋能集装箱行业构建【焊接工位信息监控系统】

同宇新材冲刺深交所:年营收9.47亿 张驰与苏世国为实控人

Simple understanding of MySQL database

Openmv4 learning notes 1 --- one click download, background knowledge of image processing, lab brightness contrast

Analysis of frequent chain breaks in applications using Druid connection pools

Describe the process of key exchange

关于npm install 报错问题 error 1

根据PPG估算血压利用频谱谱-时间深度神经网络【翻】
随机推荐
Digital "new" operation and maintenance of energy industry
AcWing 3537.树查找 完全二叉树
使用map函数、split函数一行键入多个元素
Solution of commercial supply chain management platform for packaging industry: layout smart supply system and digitally integrate the supply chain of packaging industry
Simple understanding of MySQL database
R language ggplot2 visualization: use the ggdotplot function of ggpubr package to visualize dot plot, set the palette parameter, and set the colors of data points and box graphs of dot plots at differ
史上超级详细,想找工作的你还不看这份资料就晚了
Nuc11 cheetah Canyon setting U disk startup
Tongyu Xincai rushes to Shenzhen Stock Exchange: the annual revenue is 947million Zhang Chi and Su Shiguo are the actual controllers
AutoCAD - what is the default lineweight for centerline drawing and CAD? Can I modify it?
驼峰式与下划线命名规则(Camel case With hungarian notation)
About static type, dynamic type, ID, instancetype
Unlock 2 live broadcast themes in advance! Today, I will teach you how to complete software package integration Issues 29-30
Modulenotfounderror: no module named 'PIL' solution
When visual studio code starts, it prompts "the code installation seems to be corrupt. Please reinstall." Solution to displaying "unsupported" information in the title bar
人体骨骼点检测:自顶向下(部分理论)
Crawling data encounters single point login problem
Lucun smart sprint technology innovation board: annual revenue of 400million, proposed to raise 700million
数学知识——高斯消元(初等行变换解方程组)代码实现
Countdown 2 days | live broadcast preview of Tencent cloud message queue data import platform