1603-设计停车系统

Raphael Liu Lv10

请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。

请你实现 ParkingSystem 类:

  • ParkingSystem(int big, int medium, int small) 初始化 ParkingSystem 类,三个参数分别对应每种停车位的数目。
  • bool addCar(int carType) 检查是否有 carType 对应的停车位。 carType 有三种类型:大,中,小,分别用数字 123 表示。 一辆车只能停在 ****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 取值为 123
  • 最多会调用 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)。

 Comments
On this page
1603-设计停车系统