题目链接:点击打开链接
题目大意:略。
解题思路:略。
相关企业
- 亚马逊(Amazon)
- 高盛集团(Goldman Sachs)
- 苹果(Apple)
- 微软(Microsoft)
- 谷歌(Google)
- 彭博(Bloomberg)
- 阿里巴巴
- 字节跳动
AC 代码
class TrafficLight {
private Semaphore greenLight; // 红绿灯遥控器
private boolean road1CanGo; // 表示道路1是绿灯
private boolean road2CanGo; // 表示道路2是绿灯
public TrafficLight() {
this.greenLight = new Semaphore(1, true);
this.road1CanGo = true;
this.road2CanGo = false;
}
public 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
Runnable turnGreen, // Use turnGreen.run() to turn light to green on current road
Runnable crossCar // Use crossCar.run() to make car cross the intersection
) {
try {
// 申请获取遥控器
greenLight.acquire();
// 如果当前车道已经是绿灯了,直接通过
if ((roadId == 1 && road1CanGo) || (roadId == 2 && road2CanGo)) crossCar.run();
else if (roadId == 1 && !road1CanGo) { // 否则,如果道路1不是绿灯,用遥控器变成绿灯
turnGreen.run();
road1CanGo = true;
road2CanGo = false;
crossCar.run();
} else if (roadId == 2 && !road2CanGo) { // 如果道路2不是绿灯,用遥控器变成绿灯
turnGreen.run();
road2CanGo = true;
road1CanGo = false;
crossCar.run();
}
// 最后把遥控器归还
greenLight.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}