1603. 设计停车系统
1603. 设计停车系统
题目
Design a parking system for a parking lot. The parking lot has three kinds of parking spaces: big, medium, and small, with a fixed number of slots for each size.
Implement the ParkingSystem
class:
ParkingSystem(int big, int medium, int small)
Initializes object of theParkingSystem
class. The number of slots for each parking space are given as part of the constructor.bool addCar(int carType)
Checks whether there is a parking space ofcarType
for the car that wants to get into the parking lot.carType
can be of three kinds: big, medium, or small, which are represented by1
,2
, and3
respectively. A car can only park in a parking space of itscarType
. If there is no space available, returnfalse
, else park the car in that size space and returntrue
.
Example 1:
Input
["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
[[1, 1, 0], [1], [2], [3], [1]]
Output
[null, true, true, false, false]
Explanation
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0); parkingSystem.addCar(1); // return true because there is 1 available slot for a big car parkingSystem.addCar(2); // return true because there is 1 available slot for a medium car parkingSystem.addCar(3); // return false because there is no available slot for a small car parkingSystem.addCar(1); // return false because there is no available slot for a big car. It is already occupied.
Constraints:
0 <= big, medium, small <= 1000
carType
is1
,2
, or3
- At most
1000
calls will be made toaddCar
题目大意
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。
请你实现 ParkingSystem
类:
ParkingSystem(int big, int medium, int small)
初始化ParkingSystem
类,三个参数分别对应每种停车位的数目。bool addCar(int carType)
检查是否有carType
对应的停车位。carType
有三种类型:大,中,小,分别用数字1
,2
和3
表示。一辆车只能停在carType
对应尺寸的停车位中。如果没有空车位,请返回false
,否则将该车停入车位并返回true
。
示例 1:
输入:
["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
[[1, 1, 0], [1], [2], [3], [1]]
输出:
[null, true, true, false, false]
解释:
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0); parkingSystem.addCar(1); // 返回 true ,因为有 1 个空的大车位 parkingSystem.addCar(2); // 返回 true ,因为有 1 个空的中车位 parkingSystem.addCar(3); // 返回 false ,因为没有空的小车位 parkingSystem.addCar(1); // 返回 false ,因为没有空的大车位,唯一一个大车位已经被占据了
提示:
0 <= big, medium, small <= 1000
carType
取值为1
,2
或3
- 最多会调用
addCar
函数1000
次
解题思路
- 存储车位信息:
使用两个数组分别存储每种车位的总数量和当前已停车辆数:
max
: 每种车位的最大数量。cur
: 每种车位当前已停的车辆数量。
在构造函数
ParkingSystem
中,接收big
、medium
和small
参数,分别初始化max
数组。初始化
cur
数组为[0, 0, 0]
。
- 实现停车逻辑
addCar
:
- 每次停车时,根据
carType
(值为 1、2 或 3)找到对应的车位类别。 - 判断当前已停车辆是否小于最大数量:
- 如果是,则增加已停车辆数
cur[carType - 1]++
,返回true
。 - 否则,返回
false
。
- 如果是,则增加已停车辆数
复杂度分析
- 时间复杂度:
addCar
的时间复杂度为O(1)
,数组访问和比较操作均为常数时间。 - 空间复杂度:
O(1)
,仅使用两个长度为 3 的数组来存储车位信息。
代码
/**
* @param {number} big
* @param {number} medium
* @param {number} small
*/
class ParkingSystem {
constructor(big, medium, small) {
this.max = [big, medium, small];
this.cur = [0, 0, 0];
}
/**
* @param {number} carType
* @return {boolean}
*/
addCar(carType) {
if (this.cur[carType - 1] < this.max[carType - 1]) {
this.cur[carType - 1]++;
return true;
}
return false;
}
}
/**
* Your ParkingSystem object will be instantiated and called as such:
* var obj = new ParkingSystem(big, medium, small)
* var param_1 = obj.addCar(carType)
*/