解題說明
Design Parking System
題目描述:
設計一個停車場系統,包含三種車位:大型(big)、中型(medium)、小型(small)。初始化時給定每種車位的數量。每次有車要停時,呼叫 addCar(carType),如果該類型還有空位則停入並回傳 true,否則回傳 false。
解題思路:
這是一道簡單的設計題。用一個大小為 3 的陣列(或三個變數)記錄每種車位的剩餘數量。每次 addCar 時,檢查對應類型的剩餘數量是否大於 0,若是則減一並回傳 true,否則回傳 false。
注意 carType 從 1 開始(1=大、2=中、3=小),對應到陣列時需要偏移索引。
C++ 解法
複雜度分析
時間複雜度:O(1) — 每次 addCar 操作僅需常數時間的陣列存取和比較。
空間複雜度:O(1) — 只使用固定大小的陣列(3 個元素)。
虛擬碼
1. Initialize array spots[3] with [big, medium, small]
2. addCar(carType):
a. index = carType - 1
b. If spots[index] > 0:
- spots[index] -= 1
- Return true
c. Return false其他解法
使用三個獨立變數:直接用 big_, medium_, small_ 三個成員變數,在 addCar 中用 switch-case 判斷。程式碼更直觀但不夠簡潔。
使用 HashMap:用 unordered_map<int, int> 記錄每種類型的剩餘車位。適合車型種類不固定的擴展場景,但對本題三種固定類型來說是過度設計。
延伸思考
- 如果需要支援「車輛離開」(釋放車位),該如何修改設計?
- 如果大型車位沒空時可以佔用中型車位(依此類推),要如何實現?
- 在多執行緒環境下,如何保證 addCar 的線程安全性?