Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Số cuộc gọi gần đây (Number of Recent Calls) trong Python


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