Giả sử chúng ta phải thiết kế một hệ thống quản lý trạng thái đặt chỗ của n ghế. Các ghế được đánh số từ 1 đến n. Vì vậy, chúng tôi phải triển khai lớp SeatReserveManager, với các chức năng này -
-
Hàm tạo lấy n làm đầu vào và khởi tạo đối tượng sẽ quản lý n chỗ ngồi được đánh số từ 1 đến n. Ban đầu tất cả các ghế đều có sẵn.
-
Reserve (), thao tác này sẽ tìm nạp ghế chưa đặt trước được đánh số nhỏ nhất, sau đó đặt trước và trả về số của nó.
-
unreserve (seatNumber), điều này sẽ không bảo tồn một chỗ đã đặt trước với givenseatNumber.
Vì vậy, nếu đầu vào giống như
-
obj =SeatReserveManager (7)
-
obj.reserve ()
-
obj.reserve ()
-
obj.reserve ()
-
obj.unreserve (2)
-
obj.unreserve (5)
-
obj.reserve ()
-
obj.reserve ()
thì đầu ra sẽ là 1, 2, 3, 2, 5, ban đầu đặt trước ba ghế 1, 2, 3, sau đó chưa đặt trước 2 và 5 nhưng chưa đặt trước 5, sau đó đặt trước 5 chỗ tiếp theo.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Định nghĩa Constuctor (). Điều này sẽ mất n
-
current_seat:=0
-
void_seats:=a new list
-
Định nghĩa một hàm dự trữ (). Điều này sẽ mất
-
nếu độ dài của void_seats> 0, thì
-
s:=tối thiểu là trống_số
-
xóa s khỏi blank_seats
-
trả lại s
-
-
current_seat:=current_seat + 1
-
trả về current_seat
-
Định nghĩa một hàm unreserve (). Điều này sẽ có số ghế
-
chèn số ghế vào cuối chỗ trống
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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())
Đầu vào
obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
Đầu ra
1 2 3 2 5