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