Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

एक कतार डिजाइन करने का कार्यक्रम जो सबसे हाल ही में उपयोग किए गए तत्व को पायथन में इसके अंत तक ले जाता है

मान लीजिए, हमें एक कतार डिजाइन करने के लिए कहा जाता है जो सबसे हाल ही में उपयोग किए गए तत्व को इसके अंत तक ले जाती है। कतार को पूर्णांक संख्या 1 से n के साथ आरंभ किया जाएगा। अब हमें एक फ़ंक्शन बनाना है ताकि जब भी इसे कॉल किया जाए, तो यह मान को उसके इनपुट के रूप में दिए गए स्थान से कतार के अंत तक ले जाए। हम फ़ंक्शन को कई बार कॉल करेंगे, और फ़ंक्शन अपने मूविंग कार्य को करते हुए वर्तमान में कतार के अंत में मान लौटाएगा।

इसलिए, यदि कतार को मान n =5 के साथ प्रारंभ किया गया है, या इसमें 1 से 5 तक के मान हैं; और जिन स्थितियों में चाल की जाती है वे क्रमशः 5, 2, 3, और 1 हैं, तो आउटपुट 5, 2, 4, 1 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • i :=सरणी अनुक्रमणिका -1 में स्थिति, जहां क्रमबद्ध क्रम बनाए रखने के दाईं ओर मान k डाला जा सकता है
  • x:=डेटा से हटाएं (k - अनुक्रमणिका[i])वां तत्व[i]
  • ii के लिए i+1 से लेकर अनुक्रमणिका के आकार तक के लिए, करें
    • सूचकांक[ii] :=अनुक्रमणिका[ii] - 1
  • यदि डेटा के अंतिम तत्व का आकार>=nn, तो
    • सूची डेटा के अंत में एक नई सूची डालें
    • सूची अनुक्रमणिका के अंत में n डालें
  • डेटा के अंत में x डालें
  • यदि डेटा [i] खाली है, तो
    • डेटा से ith तत्व हटाएं
    • अनुक्रमणिका से ith तत्व हटाएं
  • रिटर्न x

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

from bisect import bisect_right
from math import sqrt
class TestQueue:
   def __init__(self, n):
      self.n = n
      self.nn = int(sqrt(n))
      self.data = []
      self.index = []
      for i in range(1, n+1):
         ii = (i-1)//self.nn
         if ii == len(self.data):
            self.data.append([])
            self.index.append(i)
         self.data[-1].append(i)

   def solve(self, k):
      i = bisect_right(self.index, k)-1
      x = self.data[i].pop(k - self.index[i])
      for ii in range(i+1, len(self.index)):
         self.index[ii] -= 1
      if len(self.data[-1]) >= self.nn:
         self.data.append([])
         self.index.append(self.n)
      self.data[-1].append(x)
      if not self.data[i]:
         self.data.pop(i)
         self.index.pop(i)
      return x

queue = TestQueue(5)
print(queue.solve(5))
print(queue.solve(2))
print(queue.solve(3))
print(queue.solve(1))

इनपुट

queue = TestQueue(5)
print(queue.solve(5))
print(queue.solve(2))
print(queue.solve(3))
print(queue.solve(1))

आउटपुट

5
2
4
1

  1. एक श्रृंखला में सबसे अधिक बार-बार आने वाले तत्व को खोजने के लिए पायथन में एक प्रोग्राम लिखें

    मान लें, आपके पास निम्न श्रृंखला है, Series is: 0    1 1    22 2    3 3    4 4    22 5    5 6    22 और सबसे अधिक दोहराए जाने वाले तत्व का परिणाम है, Repeated element is: 22 समाधान इसे हल करने के लिए, हम निम्नलिखित दृष्टिकोण का प

  1. श्रृंखला में सबसे अधिक बार-बार दोहराए जाने वाले तत्व को प्रिंट करने के लिए पायथन में एक प्रोग्राम लिखें

    इनपुट - मान लें, आपके पास एक सीरीज है, 0    1 1    2 2    3 3    2 4    3 5    3 6    3 7    4 8    4 9    2 आउटपुट - और, सबसे अधिक दोहराए जाने वाले तत्व का परिणाम 3 है। समाधान इसे हल करने के लिए, ह

  1. एक सरणी में सबसे बड़ा तत्व खोजने के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सरणी दी गई है, हमें सरणी के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहां हम ब्रूटफोर्स दृष्टिकोण का उपयोग करते हैं जिसमें हम पूरे लूप को पार करके सबसे बड़े तत्व की गणना करते हैं और तत्व प्राप्त करते हैं।