मान लीजिए हम RecentCounter नामक एक क्लास लिखना चाहते हैं जो हाल के अनुरोधों को गिनता है। इस क्लास में केवल एक मेथड है: ping(t), जहां t मिलीसेकंड में कुछ समय दर्शाता है। यह उन पिंग की संख्या लौटाएगा जो 3000 मिलीसेकंड पहले से अब तक की गई हैं। [t - 3000, t] समय में कोई भी पिंग गिना जाएगा, वर्तमान पिंग सहित। और यह गारंटी है कि ping के प्रत्येक कॉल में पहले से सख्ती से बड़ा t मान उपयोग किया जाता है।
तो, यदि इनपुट चार बार ping कॉल जैसा है: ping(1), ping(100), ping(3001), ping(3002), तो आउटपुट क्रमशः 1,2,3,3 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक क्यू बनाकर क्लास को आरंभ करें, प्रारंभ में यह खाली है
- ping() फ़ंक्शन परिभाषित करें। यह t लेगा
- जब क्यू का आकार 0 नहीं है और 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