各位题友大家好! 今天是 @负雪明烛 坚持日更的第 54 天。今天力扣上的每日一题是「1603. 设计停车系统」。
解题思路
今天的题目简单到难以置信。
题意:三种停车位:大、中、小,每次调用 addCar(carType)
就需要在对应的车型的停车位增加一辆车,如果该车型没有剩余空位,就无法停车。判断每次调用 addCar
时能否停车。
注意:本题的车位中的车只增加不减少。
用三个变量分别维护各类车型的剩余空位的数目,每次 addCar(carType)
的时候就把对应类型的停车空位数目 - 1。如果当前车型的剩余空位数目 == 0,那么说明无法再停车了,就返回 False;否则说明可以停车,就返回 True。
carType 的取值为 1, 2, 3
,因此可以使用数组保存停车位的剩余空位数目,根据下标来获取对应车型的停车位剩余数目。这样做的好处是,省了代码行数。
代码
下面的代码中,数组的第 0 位置初始化为 0,其实这是个占位符。目的是获取 carType
对应的停车位剩余空位个数时,直接用 park[carType]
,而不是用 park[carType - 1]
,能减少一个减法的运算。
下面分享了 Python, C++, Java 三种代码。
class ParkingSystem(object):
def __init__(self, big, medium, small):
self.park = [0, big, medium, small]
def addCar(self, carType):
if self.park[carType] == 0:
return False
self.park[carType] -= 1
return True
class ParkingSystem {
public:
ParkingSystem(int big, int medium, int small) {
park = {0, big, medium, small};
}
bool addCar(int carType) {
return park[carType] -- > 0;
}
private:
vector<int> park;
};
class ParkingSystem {
int[] park;
public ParkingSystem(int big, int medium, int small) {
park = new int[]{0, big, medium, small};
}
public boolean addCar(int carType) {
return park[carType] -- > 0;
}
}
- 时间复杂度: $O(1)$,每次
addCar
操作是 $O(1)$的是时间复杂度。 - 空间复杂度: $O(1)$,只用了常量个空间。
刷题心得
今天的题目其实可以拓展:
1. 如果允许车离开停车位,该怎么做?
2. 如果允许小车停放在比它更大的停车位上,该怎么做?
3. 如果给每个车增加 id,车离开车位的时候必须按照指定的顺序,比如先进先出,该怎么做?
4. 如果在并发场景的停入和离开车,如何保证结果正确?
OK,以上就是 @负雪明烛 写的今天题解的全部内容了,如果你觉得有帮助的话,求赞、求关注、求收藏。如果有疑问的话,请在下面评论,我会及时解答。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。
祝大家牛年大吉!AC 多多,Offer 多多!我们明天再见!