红绿灯路口
难度:
标签:
题目描述
代码结果
运行时间: 38 ms, 内存: 17.4 MB
/*
* Leetcode Problem 1279: Traffic Light Controlled Intersection
*
* Problem Statement:
* There is an intersection with a traffic light. The traffic light can be in one of three states: green, yellow, or red. Given a series of cars arriving at the intersection,
* each with an arrival time and direction, implement a system that controls the traffic light to avoid collisions and ensure cars proceed safely.
*
* Approach using Java Streams:
* 1. Use a blocking queue to manage car arrivals and traffic light state changes.
* 2. Process car entries in a stream to simulate concurrent processing.
*/
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.IntStream;
class TrafficLightStream {
private final AtomicBoolean isNorthSouthGreen = new AtomicBoolean(true);
private final BlockingQueue<Car> queue = new LinkedBlockingQueue<>();
// Car class
static class Car {
private final int carId;
private final int direction;
public Car(int carId, int direction) {
this.carId = carId;
this.direction = direction;
}
public int getDirection() {
return direction;
}
}
public void processCars() {
queue.forEach(car -> {
synchronized (this) {
while ((isNorthSouthGreen.get() && (car.getDirection() == 2 || car.getDirection() == 3)) ||
(!isNorthSouthGreen.get() && (car.getDirection() == 0 || car.getDirection() == 1))) {
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Car " + car.carId + " from direction " + car.getDirection() + " is passing.");
isNorthSouthGreen.set(!isNorthSouthGreen.get());
notifyAll();
}
});
}
public void addCar(Car car) {
queue.add(car);
}
}
public class MainStream {
public static void main(String[] args) {
TrafficLightStream trafficLight = new TrafficLightStream();
IntStream.range(1, 3).forEach(i -> trafficLight.addCar(new TrafficLightStream.Car(i, i % 4)));
trafficLight.processCars();
}
}
解释
方法:
该题解模拟了一个红绿灯交通灯控制系统,其中每次车辆到达交叉路口时,会调用carArrived方法。系统维护一个状态self.road,用来记录当前绿灯的路(1代表路A,2代表路B)。当一辆车到达时,首先判断该车所在的路是否已有绿灯。如果已有绿灯(即self.road等于车辆的roadId),车辆将直接通过crossCar()方法过路口。如果该路不是绿灯路,系统先通过turnGreen()方法将交通灯切换到该车所在的路,然后更新self.road状态,并允许车辆通过crossCar()方法过路口。
时间复杂度:
O(1)
空间复杂度:
O(1)
代码细节讲解
🦆
题解中提到当车辆到达时会判断当前绿灯路是否与车辆所在路相同。请问如果两辆车同时到达但属于不同的路,该系统如何处理这种情况?
▷🦆
在交通灯控制系统中,是否有其他的状态或者错误处理机制来应对例如信号异常或交通灯故障的情况?
▷🦆
题解中的方法每次车辆到达都会直接调用turnGreen和crossCar方法,这是否意味着系统设计中没有考虑节能和优化交通流的可能性,例如通过延迟切换绿灯或者优先级控制?
▷🦆
在实际应用中,交通流动性也受到车辆类型和大小的影响。题解是否能够适应不同类型车辆的需求,例如大型车辆或紧急车辆?
▷