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

Python में अधिकतम k आसन्न स्वैप के बाद न्यूनतम संभव पूर्णांक खोजने का प्रोग्राम


मान लीजिए हमारे पास एक स्ट्रिंग num है जो एक बहुत बड़ी पूर्णांक संख्या को दर्शाती है और एक मान k भी है। हम मान के किन्हीं दो आसन्न अंकों को अधिकतम k बार स्वैप कर सकते हैं। हमें वह न्यूनतम मान ढूंढना है जो हम प्राप्त कर सकते हैं।

उदाहरण के लिए, यदि इनपुट है num = "5432" और k = 4, तो आउटपुट 2453 होगा क्योंकि:

  • पहले संख्या है 5432
  • पहले चरण के बाद: 4532
  • दूसरे चरण के बाद: 4523
  • तीसरे चरण के बाद: 4253
  • अंतिम चरण के बाद: 2453

समाधान के चरण

  1. min_num := num के अंकों को सॉर्ट करें
  2. i := 0, to_find := 0
  3. while num != min_num and k > 0 and i < len(num):
    • indx := num में इंडेक्स i से to_find आइटम का इंडेक्स
    • while indx != -1:
      • यदि indx - i <= k, तो:
        • num := num[:i] + num[indx] + num[i:indx] + num[indx+1:]
        • k := k - (indx - i)
        • i := i + 1
        • to_find := 0
        • indx := num.find(str(to_find), i)
      • अन्यथा, लूप से बाहर निकलें
    • to_find := to_find + 1
  4. num वापस करें

उदाहरण

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

def solve(num, k):
    min_num = sorted(list(num))
    min_num = ''.join(min_num)
    i = 0
    to_find = 0
    while num != min_num and k > 0 and i < len(num):
        indx = num.find(str(to_find), i)
        while indx != -1:
            if indx - i <= k:
                num = num[:i] + num[indx] + num[i:indx] + num[indx+1:]
                k -= (indx - i)
                i += 1
                to_find = 0
                indx = num.find(str(to_find), i)
            else:
                break
        to_find += 1
    return num

num = "5432"
k = 4
print(solve(num, k))

इनपुट

"5432", 4

आउटपुट

2453
  1. Python से बाइनरी ग्रिड में मेजर डायगोनल के ऊपर ज़ीरोज़ के लिए मिनिमम स्वैप्स कैसे ढूंढें? Python से बाइनरी ग्रिड में मेजर डायगोनल के ऊपर ज़ीरोज़ के लिए मिनिमम स्वैप्स कैसे ढूंढें?

    n×n बाइनरी मैट्रिक्स में एडजेसेंट रो स्वैप्स से मेजर डायगोनल के ऊपर सभी एलिमेंट्स 0 करने के लिए मिनिमम स्वैप्स ढूंढें। एल्गोरिदम प्रत्येक रो के लिए राइटमोस्ट 1 की पोजीशन ढूंढें → m[i] = n - j - 1 (डायगोनल से दूरी)। ग्रीडी: i=0 से n-1, ऐसी रो ढूंढें जिसका = n-i-1 हो (यानी डायगोनल के ऊपर 1 न हो)। उसे

  1. पायथन में मर्जिंग के बाद न्यूनतम रंगों की संख्या खोजने का प्रोग्राम पायथन में मर्जिंग के बाद न्यूनतम रंगों की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास रंगों (R, G, B) की एक लिस्ट है। अब यदि दो अलग-अलग रंग अगल-बगल हैं तो वे तीसरे रंग के एकल रंग आइटम में बदल सकते हैं। हमें किसी भी संभावित परिवर्तन अनुक्रम के बाद शेष सबसे छोटी संख्या ढूंढनी है।उदाहरण के लिए, यदि इनपुट colors = [G, R, G, B, R] है, तो आउटपुट 1 होगा क्योंकि यह नीचे द

  1. पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट एक नंबर इनपुट दिए जाने पर, दी गई संख्या के फैक्टर्स का न्यूनतम योग ढूंढें। यहां हम सभी फैक्टर्स और उनके संबंधित योग की गणना करेंगे और फिर उनमें से न्यूनतम ढूंढेंगे। तो संख्या के गुणनफल का न्यूनतम योग ढू