本题是一道模拟题,核心在于理解红绿灯信号的周期规律以及四个方向的独立排队机制。
设周期 C=R+G,时间从 0 开始计时。
十字路口的红绿灯分为东西向(E/W)和南北向(S/N)两组,两组状态始终相反。东西向红灯亮 R 秒,然后绿灯亮 G 秒,不断循环;南北向则相反——绿灯亮 R 秒,然后红灯亮 G 秒。刚开始时(0 秒)东西方向是红灯,南北方向是绿灯。
红绿灯切换无过渡期,红灯结束时绿灯立即开始,无需额外等待。
车辆到达路口时,遇到绿灯直接走,通过路口需要 1 秒,如遇到红灯停下来等。E/W/S/N 四个方向各有一条独立车道,各自排队,互不干扰,而同向后车必须等前车走完才能走。
求从第一辆车到达路口,到最后一辆车完全离开,共同花费多少秒,和最后一辆离开的时间是第几秒。
请实现以下函数:
// C++
class Solution {
public:
vector<int> intersectionWaitingTime(int R, int G, vector<char>& directions, vector<int>& arrivalTimes);
};
// Java
class Solution {
public int[] intersectionWaitingTime(int R, int G, char[] directions, int[] arrivalTimes);
}
# Python
class Solution:
def intersectionWaitingTime(self, R: int, G: int, directions: List[str], arrivalTimes: List[int]) -> List[int]:
// JavaScript
/**
* @param {number} R
* @param {number} G
* @param {string[]} directions
* @param {number[]} arrivalTimes
* @return {number[]}
*/
var intersectionWaitingTime = function(R, G, directions, arrivalTimes) { ... };
// C
/**
* @param R 东西向红灯时长
* @param G 东西向绿灯时长
* @param directions 方向字符数组('E','W','S','N')
* @param directionsSize 方向数组长度
* @param arrivalTimes 到达时间数组
* @param arrivalTimesSize 到达时间数组长度
* @param returnSize 传出结果数组长度
* @return 长度为2的数组 [总耗时, 最后一辆离开的时间]
*/
int* intersectionWaitingTime(int R, int G, char* directions, int directionsSize,
int* arrivalTimes, int arrivalTimesSize, int* returnSize);
| 参数 | 说明 |
|---|---|
| R | 东西向红灯持续秒数(同时为南北向绿灯时长),1≤R≤60 |
| G | 东西向绿灯持续秒数(同时为南北向红灯时长),1≤G≤60 |
directions |
字符数组,用大写字母表示车辆来向,E=东向西,W=西向东,S=南向北,N=北向南 |
arrivalTimes |
整数数组,表示各车辆的到达时间,非递减排列 |
返回一个长度为 2 的整数数组 [totalTime, lastSecond]:
totalTime:第一辆车到达路口到最后一辆车完全离开的总耗时(秒)lastSecond:最后一辆车离开的时刻(秒)输入:
3,5,[E,S,W,N],[0,1,3,6]
输出:
[9,9]
解释:
周期 C=R+G=8 秒。
所有车辆都在同个 C 周期内:
最早到达 =0 秒,最晚离开 =9 秒,总时间 =9−0=9 秒,最后一秒 =9。
输入:
2,3,[E,E,S],[1,3,4]
输出:
[5,6]
解释:
周期 C=5 秒。
所有车辆都在同个 C 周期内:
最早到达 =1 秒,最晚离开 =6 秒,总时间 =6−1=5 秒,最后一秒 =6。
本题属于以下题库,请选择所需题库进行购买
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.