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

सूचियों को सख्ती से बनाने के लिए आवश्यक संचालन की न्यूनतम संख्या खोजने के लिए कार्यक्रम अजगर में बढ़ रहा है

मान लीजिए कि हमारे पास ए और बी नामक संख्याओं की दो सूची है, और वे समान लंबाई के हैं। अब विचार करें कि हम एक ऑपरेशन कर सकते हैं जहां हम नंबर ए [i] और बी [i] स्वैप कर सकते हैं। हमें दोनों सूचियों को सख्ती से बढ़ाने के लिए आवश्यक संचालन की संख्या का पता लगाना होगा।

इसलिए, यदि इनपुट A =[2, 8, 7, 10] B =[2, 4, 9, 10] जैसा है, तो आउटपुट 1 होगा, क्योंकि हम A में 7 और B में 9 स्वैप कर सकते हैं। सूचियाँ ए =[2, 8, 9, 10] और बी =[2, 4, 7, 10] की तरह होंगी जो दोनों सख्ती से बढ़ती सूचियाँ हैं।

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

  • एक फ़ंक्शन को परिभाषित करें dp() । यह मुझे ले जाएगा, prev_swapped
  • यदि A का आकार i के समान है, तो
    • वापसी 0
  • अन्यथा जब मैं 0 के समान हो, तो
    • न्यूनतम dp(i + 1, False) और 1 + dp(i + 1, True) लौटाएं
  • अन्यथा,
    • prev_A :=A[i - 1]
    • prev_B :=B[i - 1]
    • अगर prev_swapped सही है, तो
      • prev_A और prev_B को स्वैप करें
    • अगर A[i] <=prev_A या B[i] <=prev_B, तो
      • रिटर्न 1 + डीपी(i + 1, ट्रू)
    • अन्यथा,
      • उत्तर:=डीपी(i + 1, गलत)
      • अगर A[i]> prev_B और B[i]> prev_A, तो
        • उत्तर:=न्यूनतम उत्तर, 1 + डीपी(i + 1, सत्य)
      • वापसी उत्तर
    • मुख्य विधि से फ़ंक्शन को कॉल करें dp(0, False) और परिणाम के रूप में उसका मान लौटाएं

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

उदाहरण कोड

class Solution:
   def solve(self, A, B):
      def dp(i=0, prev_swapped=False):
         if len(A) == i:
            return 0
         elif i == 0:
            return min(dp(i + 1), 1 + dp(i + 1, True))
         else:
            prev_A = A[i - 1]
            prev_B = B[i - 1]
            if prev_swapped:
               prev_A, prev_B = prev_B, prev_A
            if A[i] <= prev_A or B[i] <= prev_B:
               return 1 + dp(i + 1, True)
            else:
               ans = dp(i + 1)
            if A[i] > prev_B and B[i] > prev_A:
               ans = min(ans, 1 + dp(i + 1, True))
            return ans

         return dp()

ob = Solution()
A = [2, 8, 7, 10]
B = [2, 4, 9, 10]
print(ob.solve(A, B))

इनपुट

[2, 8, 7, 10], [2, 4, 9, 10]

आउटपुट

1

  1. पायथन में सूची को संतुलित करने के लिए दो छोरों से आवश्यक न्यूनतम संख्या में विलोपन खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास 0s और 1s वाली एक सूची है, हमें सूची के आगे या पीछे से मानों को हटाना होगा। अंत में, हमें आवश्यक न्यूनतम संख्या में विलोपन की आवश्यकता है ताकि शेष सूची में 0 और 1 की समान संख्या हो। इसलिए, यदि इनपुट nums =[1, 1, 1, 0, 0, 1] जैसा है, तो आउटपुट 2 होगा, क्योंकि हम पहले वाले 1 और

  1. पायथन में एक नंबर से दूसरे नंबर बनाने के लिए आवश्यक न्यूनतम संख्या में संचालन खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक नंबर स्टार्ट है और दूसरा नंबर एंड (स्टार्ट <एंड) है, हमें इन ऑपरेशंस का उपयोग करके स्टार्ट टू एंड को कन्वर्ट करने के लिए आवश्यक ऑपरेशंस की न्यूनतम संख्या ज्ञात करनी होगी - 1 से वृद्धि 2 से गुणा करें इसलिए, यदि इनपुट प्रारंभ =5, अंत =11 जैसा है, तो आउटपुट 2 होगा, क्योंकि

  1. पायथन में एक स्ट्रिंग सबस्ट्रिंग बनाने के लिए आवश्यक न्यूनतम संख्या में संचालन खोजने के लिए कार्यक्रम

    मान लीजिए कि हमारे पास दो तार s और t हैं, हमें t को s का विकल्प बनाने के लिए s के लिए आवश्यक न्यूनतम संक्रियाएँ ज्ञात करनी होंगी। अब, प्रत्येक ऑपरेशन में, हम s में कोई भी स्थिति चुन सकते हैं और उस स्थिति के वर्ण को किसी अन्य वर्ण में बदल सकते हैं। इसलिए, यदि इनपुट s =abbpqr, t =bbxy जैसा है, तो आउट