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

पायथन में K लगातार 1 के लिए न्यूनतम आसन्न स्वैप खोजने का प्रोग्राम


मान लीजिए हमारे पास एक बाइनरी ऐरे nums और एक मान k है। एक चाल में, हम दो आसन्न इंडेक्स का चयन कर सकते हैं और उनके मानों को स्वैप कर सकते हैं। हमें चालों की न्यूनतम संख्या ढूंढनी है ताकि nums में k लगातार 1 हों।

उदाहरण के लिए, यदि इनपुट nums = [1,0,0,1,0,1,0,1], k = 3 है, तो आउटपुट 2 होगा क्योंकि एक स्वैप में हम ऐरे को [1,0,0,1,0,1,0,1] से [1,0,0,0,1,1,0,1] बना सकते हैं, फिर [1,0,0,0,1,1,1,0]।

हल करने के चरण

  1. j := 0
  2. val := 0
  3. ans := 999999
  4. loc := एक नई सूची
  5. nums में प्रत्येक इंडेक्स i और मान x के लिए:
    • यदि x नॉन-जीरो है, तो:
      • i को loc के अंत में जोड़ें
      • m := (j + len(loc) - 1) // 2
      • val := val + loc[-1] - loc[m] - (len(loc) - j) // 2
      • यदि len(loc) - j > k, तो:
        • m := (j + len(loc)) // 2
        • val := val - loc[m] - loc[j] - (len(loc) - j) // 2
        • j := j + 1
      • यदि len(loc) - j == k, तो:
        • ans := min(ans, val)
  6. ans वापस करें।

उदाहरण

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

def solve(nums, k):
    j = val = 0
    ans = 999999
    loc = []
    for i, x in enumerate(nums):
        if x:
            loc.append(i)
            m = (j + len(loc) - 1) // 2
            val += loc[-1] - loc[m] - (len(loc) - j) // 2
            if len(loc) - j > k:
                m = (j + len(loc)) // 2
                val -= loc[m] - loc[j] - (len(loc) - j) // 2
                j += 1
            if len(loc) - j == k:
                ans = min(ans, val)
    return ans

nums = [1,0,0,1,0,1,0,1]
k = 3
print(solve(nums, k))

इनपुट

[1,0,0,1,0,1,0,1], 3

आउटपुट

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

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

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

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

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

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