题目描述
思路解析动画文字版
下面 15 步动画会按主解代码推进,而不是泛泛讲题型。
1. 设计数据结构:停车系统只需一个长度 3 的数组 spaces:下标 0/1/2 分别存大/中/小车剩余车位数。
2. 初始化车位:构造函数传入 big=1, medium=1, small=0,spaces 初始化为 [1,1,0]:小车位一开始就是 0。
3. 收到 addCar(1):第一辆是大车,carType=1。注意车型从 1 开始编号,而数组下标从 0 开始。
4. 车型转下标:i = carType-1 = 0,定位到下标 0(大车位)。橙色高亮即当前要检查的车位。
5. 判断是否有空位:检查 spaces[0]=1,不等于 0,说明大车位还有剩余,可以停。
6. 扣减车位并返回 true:spaces[0] 由 1 扣减为 0,大车位用尽;返回 True,第一辆车停成功。
7. 收到 addCar(2):第二辆是中车,carType=2。当前 spaces=[0,1,0],大车位已没了。
8. 车型转下标:i = carType-1 = 1,定位到下标 1(中车位),橙色高亮当前检查的车位。
9. 判断是否有空位:spaces[1]=1,不等于 0,中车位还有剩余,可以停。
10. 扣减车位并返回 true:spaces[1] 由 1 扣减为 0,中车位也用尽;返回 True。此时 spaces=[0,0,0] 全满。
11. 收到 addCar(3):第三辆是小车,carType=3。小车位从一开始就是 0。
12. 车型转下标:i = carType-1 = 2,定位到下标 2(小车位),橙色高亮当前检查的车位。
13. 判断是否有空位:spaces[2]=0,等于 0,小车位已无剩余,不能再停。
14. 不扣减,直接返回 false:因为车位为 0,直接返回 False,且不对 spaces 做任何扣减——绝不能出现负车位。
15. 三次调用结果汇总:三次调用依次返回 True、True、False,与期望输出一致。整套系统每次操作都是 O(1)。
记住这题的代码骨架:题意约束先落到状态变量,再用循环或递归维护它。
参考代码
class ParkingSystem: def __init__(self, big, medium, small): self.spaces = [big, medium, small] def addCar(self, carType): i = carType - 1 if self.spaces[i] == 0: return False self.spaces[i] -= 1 return True复杂度
- 时间复杂度:O(1),每次操作只访问数组
- 空间复杂度:O(1),固定三类车
易错点
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
LRU 缓存
LeetCode 146 · 中等 · 沿着 设计套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题