请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。
请你实现 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
次
方法一:模拟
思路与算法
为每种车维护一个计数器,初始值为车位的数目。此后,每来一辆车,就将对应类型的计数器减 1。当计数器为 0 时,说明车位已满。
代码
[sol1-C++]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class ParkingSystem { public: int b, m, s; ParkingSystem(int big, int medium, int small): b(big), m(medium), s(small) {} bool addCar(int carType) { if (carType == 1) { if (b > 0) { b--; return true; } } else if (carType == 2) { if (m > 0) { m--; return true; } } else if (carType == 3) { if (s > 0) { s--; return true; } } return false; } };
|
[sol1-Java]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class ParkingSystem { int big, medium, small;
public ParkingSystem(int big, int medium, int small) { this.big = big; this.medium = medium; this.small = small; } public boolean addCar(int carType) { if (carType == 1) { if (big > 0) { big--; return true; } } else if (carType == 2) { if (medium > 0) { medium--; return true; } } else if (carType == 3) { if (small > 0) { small--; return true; } } return false; } }
|
[sol1-JavaScript]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| var ParkingSystem = function(big, medium, small) { this.big = big; this.medium = medium; this.small = small; };
ParkingSystem.prototype.addCar = function(carType) { if (carType === 1) { if (this.big > 0) { this.big--; return true; } } else if (carType === 2) { if (this.medium > 0) { this.medium--; return true; } } else if (carType === 3) { if (this.small > 0) { this.small--; return true; } } return false; };
|
[sol1-Golang]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| type ParkingSystem struct { left [4]int }
func Constructor(big, medium, small int) ParkingSystem { return ParkingSystem{[4]int{0, big, medium, small} } }
func (s *ParkingSystem) AddCar(carType int) bool { if s.left[carType] > 0 { s.left[carType]-- return true } return false }
|
[sol1-C]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| typedef struct { int b, m, s; } ParkingSystem;
ParkingSystem* parkingSystemCreate(int big, int medium, int small) { ParkingSystem* ret = malloc(sizeof(ParkingSystem)); ret->b = big; ret->m = medium; ret->s = small; return ret; }
bool parkingSystemAddCar(ParkingSystem* obj, int carType) { if (carType == 1) { if (obj->b > 0) { obj->b--; return true; } } else if (carType == 2) { if (obj->m > 0) { obj->m--; return true; } } else if (carType == 3) { if (obj->s > 0) { obj->s--; return true; } } return false; }
void parkingSystemFree(ParkingSystem* obj) { free(obj); }
|
时间复杂度
时间复杂度:单次操作为 O(1)。
空间复杂度:O(1)。