สมมติว่าเราต้องออกแบบระบบที่จัดการสถานะการสำรองที่นั่งจำนวน n ที่นั่ง ที่นั่งมีหมายเลขตั้งแต่ 1 ถึง n ดังนั้นเราจึงต้องใช้คลาส SeatReservManager ด้วยฟังก์ชันเหล่านี้ -
-
ตัวสร้างที่รับ n เป็นอินพุตและเริ่มต้นวัตถุที่จะจัดการ n ที่นั่งที่มีหมายเลขตั้งแต่ 1 ถึง n เริ่มแรกมีที่นั่งครบทุกที่นั่ง
-
Reserve() นี่จะดึงหมายเลขที่เล็กที่สุดที่ไม่ได้จองไว้ จากนั้นทำการสำรองและส่งคืนหมายเลขนั้น
-
unreserve(seatNumber) จะเป็นการ unreserve หนึ่งที่นั่งที่มีการระบุที่นั่ง
ดังนั้นหากอินพุตเป็นแบบ
-
obj =SeatReserveManager(7)
-
obj.reserve()
-
obj.reserve()
-
obj.reserve()
-
obj.unreserve(2)
-
obj.unreserve(5)
-
obj.reserve()
-
obj.reserve()
แล้วเอาท์พุตจะเป็น 1, 2, 3, 2, 5 ตอนแรกจองสามที่นั่ง 1, 2, 3 จากนั้นไม่จอง 2 และ 5 แต่ 5 ยังไม่จอง จอง 5 ต่อไป
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดคอนสตรัคเตอร์() นี่จะใช้เวลา n
-
current_seat :=0
-
empty_seats :=รายการใหม่
-
กำหนดฟังก์ชั่น Reserve() นี่จะใช้เวลา
-
ถ้าความยาวของ empty_seats> 0 แล้ว
-
s :=ขั้นต่ำที่ว่างเปล่า_seats
-
ลบ s จาก empty_seats
-
ผลตอบแทน s
-
-
current_seat :=current_seat + 1
-
กลับ current_seat
-
กำหนดฟังก์ชั่น unreserve() นี่จะใช้หมายเลขที่นั่ง
-
ใส่ seatNumber ต่อท้ายที่นั่งที่ว่างเปล่า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class SeatReserveManager: def __init__(self, n): self.current_seat = 0 self.empty_seats = [] def reserve(self): if len(self.empty_seats) > 0: s = min(self.empty_seats) self.empty_seats.remove(s) return s self.current_seat += 1 return self.current_seat def unreserve(self, seatNumber): self.empty_seats.append(seatNumber) obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
อินพุต
obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
ผลลัพธ์
1 2 3 2 5