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

पायथन में दो सूचियों को सख्ती से बढ़ता हुआ बनाने के लिए न्यूनतम ऑपरेशन्स खोजने का प्रोग्राम


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

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

समाधान दृष्टिकोण

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

  • एक फंक्शन dp() परिभाषित करें जो i, prev_swapped लेता है
  • यदि len(A) == i, तो 0 लौटाएं
  • अन्यथा यदि i == 0, तो
    • min(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 + dp(i+1, True) लौटाएं
    • अन्यथा:
      • ans := dp(i+1, False)
      • यदि A[i] > prev_B और B[i] > prev_A, तो
        • ans := min(ans, 1 + dp(i+1, True))
      • ans लौटाएं
    • मुख्य मेथड से 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. - पायथन में सूची को संतुलित बनाने के लिए दोनों छोरों से न्यूनतम डिलीशन की संख्या खोजने का प्रोग्राम

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

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

    मान लीजिए हमारे पास एक संख्या start और एक अन्य संख्या end है (start < end), हमें start को end में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ढूंढनी है इन संक्रियाओं का उपयोग करके: 1 से बढ़ाएं 2 से गुणा करें उदाहरण के लिए, यदि इनपुट है start = 5, end = 11, तो आउटपुट होगा 2, क्योंकि हम 2 से ग

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

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