মান লেই আমরা একটি ক্লাস লিখতে চাই যেটা RecentCounter নামে যা রিসেন্ট রিকোয়েস্ট গণনা করবে। এই ক্লাসে শুধু একটি মেথড আছে: ping(t), যেখানে t হলো মিলিসেকেন্ডে কিছু সময়। এটি ৩০০০ মিলিসেকেন্ড আগে থেকে এখন পর্যন্ত কতগুলো পিং করা হয়েছে তা রিটার্ন করবে। [t - 3000, t] রেঞ্জের যেকোনো পিং কাউন্ট হবে, করেন্ট পিংসহ। এবং গ্যারান্টি করা আছে যে ping-এ যেকোনো কল স্ট্রিক্টলি বড় t ভ্যালু ব্যবহার করবে।
সেজন্য, যদি ইনপুট হয় চারবার ping কল: ping(1), ping(100), ping(3001), ping(3002), তবে আউটপুট হবে 1,2,3,3।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −
- ক্লাস ইনিশিয়ালাইজ করুন একটি কিউ দিয়ে, যা প্রাথমিকভাবে খালি
- ping() ফাংশন ডিফাইন করুন। এটি t নিবে
- যখন কিউর সাইজ ০ নয় এবং t - queue[0] > 3000, লুপ
- কিউর প্রথম এলিমেন্ট ডিলিট
- t কিউর শেষে অ্যাপেন্ড
- কিউর সাইজ রিটার্ন
বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −
উদাহরণ
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))
ইনপুট
ob.ping(1) ob.ping(100) ob.ping(3001) ob.ping(3002)
আউটপুট
1 2 3 3