Giả sử ta viết class RecentCounter đếm yêu cầu gần đây. Class chỉ có phương thức: ping(t), t là thời gian milli-giây. Trả về số ping từ 3000 milli-giây trước đến nay. Bất kỳ ping nào với thời gian trong [t-3000, t] đều đếm, kể cả ping hiện tại. Đảm bảo mỗi lần gọi ping dùng t tăng chặt.
Ví dụ, gọi ping 4 lần: ping(1), ping(100), ping(3001), ping(3002), đầu ra 1,2,3,3 tương ứng.
Giải quyết:
- Khởi tạo class với một queue, ban đầu rỗng
- Định nghĩa hàm ping(t)
- while queue không rỗng và t - queue[0] > 3000, xóa phần tử đầu queue
- thêm t vào cuối queue
- trả về độ dài queue
Xem triển khai:
Ví dụ
class RecentCounter:
def __init__(self):
self.queue = []
def ping(self, t):
while len(self.queue) and t - self.queue[0] > 3000:
self.queue.pop(0)
self.queue.append(t)
return len(self.queue)
ob = RecentCounter()
print(ob.ping(1))
print(ob.ping(100))
print(ob.ping(3001))
print(ob.ping(3002)) Đầu vào
ob.ping(1) ob.ping(100) ob.ping(3001) ob.ping(3002)
Đầu ra
1 2 3 3