开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
LeetCode 1603. 设计停车系统
一、题目描述:
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。
请你实现 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 次
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
-
这道题考察了什么思想?你的思路是什么?
这道题目主要是考察停车位的数量问题,主要是判断大小。
因为每次调用addCar(carType),都要在对应停车位数量切片的值减一,如果没有剩余车位,就无法停车,返回false,如果能够减一,就在减一操作后返回true。
注意本题中的车位只增加不减少。
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
是一次通过的,但是代码可以进行优化,数组的第 0 位置初始化为 0,其实这是个占位符。目的是获取 carType 对应的停车位剩余空位个数时,直接用 park[carType] ,而不是用 park[carType - 1] ,能减少一个减法的运算。
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 } -
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
class ParkingSystem { int big, medium, small; public ParkingSystem(int _big, int _medium, int _small) { big = _big; medium = _medium; small = _small; } public boolean addCar(int ct) { if (ct == 1 && big > 0) return big-- > 0; else if (ct == 2 && medium > 0) return medium-- > 0; else if (ct == 3 && small > 0) return small-- > 0; return false; } } 作者:AC_OIer 链接:https://leetcode.cn/problems/design-parking-system/solution/yi-ti-san-jie-jian-dan-bian-liang-ha-xi-0gs72/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、AC 代码:
type ParkingSystem struct { park [3]int } func Constructor(big int, medium int, small int) ParkingSystem { return ParkingSystem{[3]int{big,medium,small}} } func (this *ParkingSystem) AddCar(carType int) bool { if this.park[carType - 1] > 0{ this.park[carType - 1]-- return true } return false } /** * Your ParkingSystem object will be instantiated and called as such: * obj := Constructor(big, medium, small); * param_1 := obj.AddCar(carType); */ 执行用时:36 ms, 在所有 Go 提交中击败了75.23%的用户
内存消耗:7 MB, 在所有 Go 提交中击败了92.66%的用户
通过测试用例:102 / 102
四、总结:
这是一道十分简单的题目,应该大部分人都能一次过吧~
模板来源
作者:掘金酱
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。