leetcode
leetcode 1451 ~ 1500
设计停车系统

设计停车系统

难度:

标签:

题目描述

代码结果

运行时间: 75 ms, 内存: 16.6 MB


/*
 * 题目思路:
 * 1. 我们需要实现一个停车系统,这个系统有三种类型的停车位:大、中、小。
 * 2. ParkingSystem 类包含一个构造函数和一个 addCar 方法。
 * 3. 构造函数接受三个参数,分别是大、中、小停车位的数量,并初始化对应的成员变量。
 * 4. addCar 方法接受一个 carType 参数,根据车的类型判断是否有对应的空位,
 *    如果有空位则返回 true 并减少该类型的空位数量,否则返回 false。
 * 5. 使用 Stream API 来简化代码逻辑。
 */

import java.util.Map;
import java.util.stream.IntStream;

public class ParkingSystem {
    private final Map<Integer, Integer> parkingSlots;

    // 构造函数初始化各类型停车位的数量
    public ParkingSystem(int big, int medium, int small) {
        parkingSlots = Map.of(1, big, 2, medium, 3, small);
    }

    // 根据 carType 添加车辆
    public boolean addCar(int carType) {
        return parkingSlots.computeIfPresent(carType, (key, value) -> value > 0 ? value - 1 : value) > 0;
    }
}

解释

方法:

题解的核心思路是创建一个数组来存储每种车位的数量(大,中,小)。构造函数接收三种车位的数量并初始化数组。在addCar方法中,根据车辆类型(由carType - 1得到的索引),检查相应车位是否还有空间。如果有空间,就对应车位数量减一并返回true表示停车成功;如果没有空间,则直接返回false。

时间复杂度:

O(1)

空间复杂度:

O(1)

代码细节讲解

🦆
构造函数中的数组初始化方式是否有考虑到异常情况,例如输入的车位数量为负数?
题解中的构造函数没有显式地处理车位数量为负数的情况。在实际应用中,应当在构造函数中添加检查,确保传入的车位数量不小于零。如果小于零,可以抛出异常或将值设为零,防止程序逻辑出错。
🦆
在addCar方法中,如果连续调用多次对同一类型车位进行停车操作,会不会出现车位数变为负数的情况?
在addCar方法中,如果车位已经为零,则会直接返回false且不会减少车位数。因此,车位数不会变为负数,这种设计确保了车位计数的准确性。
🦆
类如何处理当车位已满但继续尝试停车的情况,除了返回false之外,是否有其他的错误提示或处理机制?
在当前的实现中,如果车位已满,addCar方法仅返回false。没有提供其他错误提示或异常处理机制。在实际应用中,可以考虑增加日志记录或抛出自定义异常来提供更清晰的错误反馈。
🦆
addCar函数中直接修改数组元素的做法是否线程安全,如果不是,应如何改进以支持多线程环境?
当前实现在多线程环境下不是线程安全的。多个线程可能同时修改数组,导致数据不一致。为了使其线程安全,可以使用锁(如 threading.Lock 在 Python 中)来同步对数组的访问,确保一次只有一个线程可以修改车位数量。

相关问题