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

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

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

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

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

  • रिट:=0
  • minq :=एक खाली डबल एंडेड कतार
  • अधिकतम:=एक खाली डबल एंडेड कतार
  • एल :=0
  • r :=0
  • जबकि r <अंकों का आकार, करें
    • n :=nums[r]
    • जबकि minq खाली नहीं है और n
    • मिनक से अंतिम तत्व हटाएं
  • मिनक के अंत में r डालें
  • जबकि maxq खाली नहीं है और n> nums[maxq का अंतिम तत्व], करते हैं
    • अधिकतम से अंतिम तत्व हटाएं
  • अधिकतम के अंत में r डालें
  • r :=r + 1
  • जबकि l
  • यदि minq[0] l के समान है, तो
    • मिनक से बायां आइटम
  • यदि maxq[0] l के समान है, तो
    • अधिकतम का अंतिम आइटम हटाएं
  • एल :=एल + 1
  • ret :=अधिकतम रिट और (r - l)
  • रिटर्न रिटर्न
  • उदाहरण

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

    from collections import deque
    def solve(nums):
       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
    
    nums = [10, 2, 6, 6, 4, 4]
    print(solve(nums))

    इनपुट

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

    आउटपुट

    4

    1. पायथन में सबसे लंबे समय तक बढ़ते क्रम की लंबाई खोजने का कार्यक्रम

      मान लीजिए हमारे पास संख्याओं की एक सूची है। हमें सबसे लंबे समय तक बढ़ते क्रम की लंबाई ज्ञात करनी है। तो अगर इनपुट [6, 1, 7, 2, 8, 3, 4, 5] जैसा है, तो आउटपुट 5 होगा, क्योंकि सबसे लंबे समय तक बढ़ने वाला क्रम [2,3,4,5,6] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - टेल्स नामक एक सरणी बनाएं

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

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

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

      मान लीजिए कि हमारे पास संख्याओं की एक क्रमबद्ध सरणी है, हमें लगातार तत्वों के सबसे लंबे अनुक्रम की लंबाई का पता लगाना है। इसलिए, यदि इनपुट अंकों की तरह है =[70, 7, 50, 4, 6, 5], तो आउटपुट 4 होगा, क्योंकि लगातार तत्वों का सबसे लंबा अनुक्रम [4, 5, 6, 7] है। इसलिए हम इसकी लंबाई लौटाते हैं:4. इसे हल क