跳至主要內容

1603. 设计停车系统


1603. 设计停车系统

🟢   🔖  设计 计数 模拟  🔗 力扣open in new window LeetCodeopen in new window

题目

Design a parking system for a parking lot. The parking lot has three kinds of parking spaces: big, medium, and small, with a fixed number of slots for each size.

Implement the ParkingSystem class:

  • ParkingSystem(int big, int medium, int small) Initializes object of the ParkingSystem class. The number of slots for each parking space are given as part of the constructor.
  • bool addCar(int carType) Checks whether there is a parking space of carType for the car that wants to get into the parking lot. carType can be of three kinds: big, medium, or small, which are represented by 1, 2, and 3 respectively. A car can only park in a parking space of itscarType. If there is no space available, return false, else park the car in that size space and return true.

Example 1:

Input

["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]

[[1, 1, 0], [1], [2], [3], [1]]

Output

[null, true, true, false, false]

Explanation

ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);
parkingSystem.addCar(1); // return true because there is 1 available slot for a big car
parkingSystem.addCar(2); // return true because there is 1 available slot for a medium car
parkingSystem.addCar(3); // return false because there is no available slot for a small car
parkingSystem.addCar(1); // return false because there is no available slot for a big car. It is already occupied.

Constraints:

  • 0 <= big, medium, small <= 1000
  • carType is 1, 2, or 3
  • At most 1000 calls will be made to addCar

题目大意

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

请你实现 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. 存储车位信息:
  • 使用两个数组分别存储每种车位的总数量和当前已停车辆数:

    • max: 每种车位的最大数量。
    • cur: 每种车位当前已停的车辆数量。
  • 在构造函数 ParkingSystem 中,接收 bigmediumsmall 参数,分别初始化 max 数组。

  • 初始化 cur 数组为 [0, 0, 0]

  1. 实现停车逻辑 addCar
  • 每次停车时,根据 carType(值为 1、2 或 3)找到对应的车位类别。
  • 判断当前已停车辆是否小于最大数量:
    • 如果是,则增加已停车辆数 cur[carType - 1]++,返回 true
    • 否则,返回 false

复杂度分析

  • 时间复杂度addCar 的时间复杂度为 O(1),数组访问和比较操作均为常数时间。
  • 空间复杂度O(1),仅使用两个长度为 3 的数组来存储车位信息。

代码

/**
 * @param {number} big
 * @param {number} medium
 * @param {number} small
 */
class ParkingSystem {
	constructor(big, medium, small) {
		this.max = [big, medium, small];
		this.cur = [0, 0, 0];
	}
	/**
	 * @param {number} carType
	 * @return {boolean}
	 */
	addCar(carType) {
		if (this.cur[carType - 1] < this.max[carType - 1]) {
			this.cur[carType - 1]++;
			return true;
		}
		return false;
	}
}

/**
 * Your ParkingSystem object will be instantiated and called as such:
 * var obj = new ParkingSystem(big, medium, small)
 * var param_1 = obj.addCar(carType)
 */