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 theParkingSystemclass. 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 ofcarTypefor the car that wants to get into the parking lot.carTypecan be of three kinds: big, medium, or small, which are represented by1,2, and3respectively. 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 <= 1000carTypeis1,2, or3- At most
1000calls 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 <= 1000carType取值为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)
*/
