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

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


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

उदाहरण के लिए, यदि इनपुट nums = [3, 5, 9, 6, 10, 7] और k = 6 है, तो आउटपुट 3 होगा, क्योंकि हम 9 को एक बार और 6 को चार बार बढ़ाकर सबलिस्ट [10, 10, 10] प्राप्त कर सकते हैं।

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

  • यदि nums खाली है, तो 0 लौटाएं।

  • wMax को nums के आकार का एक डबल-एंडेड क्यू बनाएं और (nums[0], 0) डालें।

  • i := 0, inc := 0 आरंभ करें।

  • j को 1 से len(nums) - 1 तक लूप में चलाएं:

    • जब तक wMax खाली नहीं है और wMax[0][1] < i, बाएं तत्व को हटाएं।

    • pMax := wMax[0][0] प्राप्त करें।

    • जब तक wMax खाली नहीं है और wMax[-1][0] <= nums[j], दाएं तत्व को हटाएं।

    • (nums[j], j) को wMax के अंत में जोड़ें।

    • यदि pMax < wMax[0][0], तो inc += (j - i) * (wMax[0][0] - pMax)।

    • अन्यथा, inc += pMax - nums[j]।

    • यदि inc > k, तो:

      • inc -= wMax[0][0] - nums[i]।

      • जब तक wMax खाली नहीं है और wMax[0][1] <= i, बाएं तत्व को हटाएं।

      • यदि wMax[0][0] < nums[i], तो inc -= (nums[i] - wMax[0][0]) * (j - i)।

      • i := i + 1 बढ़ाएं।

  • len(nums) - i लौटाएं।

उदाहरण

from collections import deque class Solution:    def solve(self, nums, k):       if not nums:          return 0       wMax = deque([(nums[0], 0)], maxlen=len(nums))       i = 0       inc = 0       for j in range(1, len(nums)):          while wMax and wMax[0][1] < i:             wMax.popleft()          pMax = wMax[0][0]          while wMax and wMax[-1][0] <= nums[j]:             wMax.pop()          wMax.append((nums[j], j))          if pMax < wMax[0][0]:             inc += (j - i) * (wMax[0][0] - pMax)          else:             inc += pMax - nums[j]          if inc > k:             inc -= wMax[0][0] - nums[i]             while wMax and wMax[0][1] <= i:                wMax.popleft()             if wMax[0][0] < nums[i]:                inc -= (nums[i] - wMax[0][0]) * (j - i)             i += 1       return len(nums) - i ob = Solution() nums = [3, 5, 9, 6, 10, 7] k = 6 print(ob.solve(nums, k))

इनपुट

[3, 5, 9, 6, 10, 7], 6

आउटपुट

3

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

    मान लीजिए हमारे पास एक स्ट्रिंग S है। हमें S में सबसे लंबे पैलिंड्रोमिक सबस्ट्रिंग की लंबाई ढूंढनी है। हम मान रहे हैं कि स्ट्रिंग S की लंबाई 1000 है। उदाहरण के लिए, यदि स्ट्रिंग BABAC है, तो सबसे लंबा पैलिंड्रोमिक सबस्ट्रिंग BAB है और इसकी लंबाई 3 है।समाधान दृष्टिकोण (डायनामिक प्रोग्रामिंग)इस समस्या

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

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

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

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