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

पायथन में दी गई शर्त के साथ सबसे लंबे समय तक सबलिस्ट की लंबाई खोजने का कार्यक्रम

मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें सबसे लंबी उपसूची की लंबाई का पता लगाना होगा जहां 2 * न्यूनतम उपसूची> अधिकतम उपसूची।

इसलिए, यदि इनपुट अंकों की तरह है =[10, 2, 6, 6, 4, 4], तो आउटपुट 4 होगा, क्योंकि सबलिस्ट [6, 6, 4,4] सबसे लंबी सबलिस्ट है जो मानदंड रखती है 2*4>6 के रूप में।

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

  • रिट:=0

  • दो डबल एंडेड कतारों को परिभाषित करें minq और maxq

  • एल:=0, आर:=0

  • जबकि r <अंकों का आकार, करें

    • एन:=अंक [आर]

    • जबकि minq और n

      • minq से अंतिम तत्व हटाएं

    • minq के अंत में r डालें

    • जबकि maxq और n> nums[maxq का अंतिम तत्व], करते हैं

      • maxq से अंतिम तत्व हटाएं

    • maxq के अंत में r डालें

    • आर:=आर + 1

    • जबकि l

      • अगर minq[0] l के समान है, तो

        • minq का पहला तत्व हटाएं

      • अगर maxq[0] l के समान है, तो

        • maxq का पहला तत्व हटाएं

      • एल :=एल + 1

    • रिट :=अधिकतम रिट और (आर - एल)

  • वापसी रिट

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

उदाहरण

class Solution:
   def solve(self, nums):
      from collections import deque
      ret = 0
      minq, maxq = deque(), deque()
      l, r = 0, 0
      while r < len(nums):
         n = nums[r]
         while minq and n < nums[minq[-1]]:
            minq.pop()
      minq.append(r)
      while maxq and n > nums[maxq[-1]]:
         maxq.pop()
      maxq.append(r)
      r += 1
      while l < r and nums[minq[0]] * 2 <= nums[maxq[0]]:
         if minq[0] == l:
            minq.popleft()
         if maxq[0] == l:
            maxq.popleft()
         l += 1
      ret = max(ret, r - l)
   return ret
ob = Solution()
nums = [10, 2, 6, 6, 4, 4]
print(ob.solve(nums))

इनपुट

[10, 2, 6, 6, 4, 4]

आउटपुट

4

  1. पायथन में सबसे लंबे पैलिंड्रोमिक सबस्ट्रिंग की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक स्ट्रिंग S है। हमें S में सबसे लंबे पैलिंड्रोमिक सबस्ट्रिंग की लंबाई का पता लगाना है। हम मान रहे हैं कि स्ट्रिंग S की लंबाई 1000 है। इसलिए यदि स्ट्रिंग BABAC है, तो सबसे लंबा पैलिंड्रोमिक सबस्ट्रिंग BAB है। और लंबाई 3 है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  1. पायथन में सबसे लंबे समय तक वैकल्पिक असमानता तत्वों की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, और सबसे लंबी सबलिस्ट इनम्स की लंबाई पाएं, जैसे कि प्रत्येक लगातार संख्याओं के बीच समानता संबंध वैकल्पिक रूप से ऑपरेशन से कम और अधिक से अधिक के बीच बदलता है। पहली दो संख्याओं की असमानता या तो उससे कम या उससे बड़ी हो सकती है। इसलिए,

  1. पायथन में सबसे लंबे समय तक विशिष्ट उपन्यास की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास संख्याओं की एक सूची है, जिसे nums कहा जाता है, और हमें सबसे लंबी सन्निहित सबलिस्ट की लंबाई का पता लगाना है, जहां इसके सभी तत्व अद्वितीय हैं। इसलिए, यदि इनपुट अंकों की तरह है =[6, 2, 4, 6, 3, 4, 5, 2], तो आउटपुट 5 होगा, क्योंकि अद्वितीय तत्वों की सबसे लंबी सूची [6, 3, 4, 5] है