当前位置: 面试刷题>> 停车场 (经典算法题500道)


由于原始题目只给出了“停车场”这一关键词,并未明确具体的算法要求,我将假设一个常见的场景来补充完整题目描述,并给出相应的PHP、Python和JavaScript代码示例。 **题目描述**: 设计一个停车场管理系统,该系统能够处理车辆的进入(park)和离开(unpark)操作。车辆由唯一的ID标识,停车场有一个固定的容量限制。系统需要能够: 1. **车辆进入**:如果停车场未满,允许车辆进入并返回其停放位置(从1开始编号的整数)。 2. **车辆离开**:如果停车场中有该车辆,则允许其离开,并返回该车辆离开后的第一个空位置编号(如果整个停车场都空了,则返回-1)。 **示例代码**: ### PHP 示例 ```php class ParkingLot { private $capacity; private $slots; public function __construct($capacity) { $this->capacity = $capacity; $this->slots = array_fill(1, $capacity, null); } public function park($carId) { foreach ($this->slots as $key => $value) { if ($value === null) { $this->slots[$key] = $carId; return $key; } } return -1; // 停车场已满 } public function unpark($carId) { $firstEmptySlot = null; foreach ($this->slots as $key => $value) { if ($value === $carId) { $this->slots[$key] = null; return $firstEmptySlot === null ? -1 : $firstEmptySlot; } if ($value === null && $firstEmptySlot === null) { $firstEmptySlot = $key; } } return -1; // 未找到车辆 } } // 使用示例 $parkingLot = new ParkingLot(5); echo $parkingLot->park(1) . "\n"; // 输出车辆停放位置 echo $parkingLot->unpark(1) . "\n"; // 输出车辆离开后第一个空位置 ``` ### Python 示例 ```python class ParkingLot: def __init__(self, capacity): self.capacity = capacity self.slots = [None] * capacity def park(self, car_id): for i, slot in enumerate(self.slots): if slot is None: self.slots[i] = car_id return i + 1 return -1 # 停车场已满 def unpark(self, car_id): first_empty_slot = None for i, slot in enumerate(self.slots): if slot == car_id: self.slots[i] = None return first_empty_slot if first_empty_slot is not None else -1 if slot is None and first_empty_slot is None: first_empty_slot = i + 1 return -1 # 未找到车辆 # 使用示例 parking_lot = ParkingLot(5) print(parking_lot.park(1)) # 输出车辆停放位置 print(parking_lot.unpark(1)) # 输出车辆离开后第一个空位置 ``` ### JavaScript 示例 ```javascript class ParkingLot { constructor(capacity) { this.capacity = capacity; this.slots = new Array(capacity).fill(null); } park(carId) { for (let i = 0; i < this.slots.length; i++) { if (this.slots[i] === null) { this.slots[i] = carId; return i + 1; } } return -1; // 停车场已满 } unpark(carId) { let firstEmptySlot = null; for (let i = 0; i < this.slots.length; i++) { if (this.slots[i] === carId) { this.slots[i] = null; return firstEmptySlot !== null ? firstEmptySlot : -1; } if (this.slots[i] === null && firstEmptySlot === null) { firstEmptySlot = i + 1; } } return -1; // 未找到车辆 } } // 使用示例 const parkingLot = new ParkingLot(5); console.log(parkingLot.park(1)); // 输出车辆停放位置 console.log(parkingLot.unpark(1)); // 输出车辆离开后第一个空位置 ``` **码小课**:在码小课网站上,你可以找到更多关于数据结构、算法设计以及编程语言的深入解析和实战项目,帮助你更好地掌握编程技能。