当前位置:网站首页>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;
};
边栏推荐
- Understanding disentangling in β- VAE paper reading notes
- 抽象类与抽象方法
- openmv4 学习笔记1----一键下载、图像处理背景知识、LAB亮度-对比度
- 包装行业商业供应链管理平台解决方案:布局智慧供应体系,数字化整合包装行业供应链
- RT-Thread 组件 FinSH 使用时遇到的问题
- 渲大师携手向日葵,远控赋能云渲染及GPU算力服务
- How are you in the first half of the year occupied by the epidemic| Mid 2022 summary
- Solution of commercial supply chain management platform for packaging industry: layout smart supply system and digitally integrate the supply chain of packaging industry
- 用于远程医疗的无创、无袖带血压测量【翻译】
- R语言ggplot2可视化:使用ggpubr包的ggdotplot函数可视化点阵图(dot plot)、设置palette参数设置不同水平点阵图数据点和箱图的颜色
猜你喜欢
Simple understanding of MySQL database
Help improve the professional quality of safety talents | the first stage of personal ability certification and assessment has been successfully completed!
Multithreading Basics: basic concepts of threads and creation of threads
Pytorch common loss function
Reptiles have a good time. Are you full? These three bottom lines must not be touched!
如何提高网站权重
用于远程医疗的无创、无袖带血压测量【翻译】
Lucun smart sprint technology innovation board: annual revenue of 400million, proposed to raise 700million
Meilu biological IPO was terminated: the annual revenue was 385million, and Chen Lin was the actual controller
抽象类与抽象方法
随机推荐
Synchronous development of business and application: strategic suggestions for application modernization
The nearest library of Qinglong panel
史上超级详细,想找工作的你还不看这份资料就晚了
安装及管理程序
Helm deploy etcd cluster
Digital "new" operation and maintenance of energy industry
helm部署etcd集群
Graffiti intelligence is listed on the dual main board in Hong Kong: market value of 11.2 billion Hong Kong, with an annual revenue of 300 million US dollars
pychrm社区版调用matplotlib.pyplot.imshow()函数图像不弹出的解决方法
根据PPG估算血压利用频谱谱-时间深度神经网络【翻】
线代笔记....
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
Handwritten online chat system (principle part 1)
Deep circulation network long-term blood pressure prediction [translation]
2022.2.12
涂鸦智能在香港双重主板上市:市值112亿港元 年营收3亿美元
A wearable arm device for night and sleeveless blood pressure measurement [translation]
能源行业的数字化“新”运维
Solve DoS attack production cases
Optical blood pressure estimation based on PPG and FFT neural network [translation]