请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。
请你实现 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++]| 12
 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]| 12
 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]| 12
 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]| 12
 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]| 12
 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)。