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

पायथन का उपयोग करके m बुके बनाने के लिए न्यूनतम दिनों की संख्या खोजने का प्रोग्राम


मान लीजिए हमारे पास nums नामक एक पूर्णांक सरणी है, हमारे पास दो अन्य मान m और k भी हैं। अब, हमें m बुके बनाने हैं। एक बुके बनाने के लिए हमें बगीचे से k आसन्न फूल चाहिए। यहां बगीचे में n अलग-अलग फूल हैं, ith फूल bloomDay[i] में खिलेगा। प्रत्येक फूल का उपयोग केवल एक बुके में किया जा सकता है। हमें बगीचे से m बुके बनाने के लिए प्रतीक्षा करने के लिए न्यूनतम दिनों की संख्या ढूंढनी है। यदि हम m बुके नहीं बना सकते, तो -1 वापस करें।

उदाहरण के लिए, यदि इनपुट bloomDay = [5,5,5,5,10,5,5] m = 2 k = 3 है, तो आउटपुट 10 होगा क्योंकि हमें 2 (m = 2) बुके चाहिए और प्रत्येक में 3 फूल होने चाहिए।

  • दिन 5 के बाद: [x, x, x, x, _, x, x], हम पहले तीन खिले फूलों का एक बुके बना सकते हैं, लेकिन दूसरा बुके नहीं बना सकते

  • दिन 10 के बाद: [x, x, x, x, x, x, x], अब हम दो बुके अलग-अलग तरीकों से बना सकते हैं।

हल करने के चरण

  • n := bloomDay का आकार

  • यदि m * k > n, तो

    • -1 वापस करें

  • एक फ़ंक्शन possible() परिभाषित करें। यह x लेगा

  • count := 0, bouquets := 0

  • bloomDay में प्रत्येक d के लिए, करें

    • यदि d <= x, तो

      • count := count + 1

      • यदि count, k के समान है, तो

        • bouquets := bouquets + 1

        • count := 0

    • अन्यथा,

      • count := 0

  • यदि bouquets >= m तो true वापस करें, अन्यथा false

  • मुख्य विधि से निम्नलिखित करें -

  • left := 0, right := 1 + bloomDay का अधिकतम

  • जब तक left < right, करें

    • mid := (left + right) / 2

    • यदि possible(mid) true है, तो

      • right := mid

    • अन्यथा,

      • left := mid + 1

  • यदि possible(left) true है, तो

    • left वापस करें

  • अन्यथा left + 1 वापस करें

उदाहरण

def solve(bloomDay, m, k):
    n = len(bloomDay)
    if m * k > n:
        return -1
    def possible(x):
        count = 0
        bouquets = 0
        for d in bloomDay:
            if d <= x:
                count += 1
                if count == k:
                    bouquets += 1
                    count = 0
            else:
                count = 0
        return bouquets >= m
    left, right = 0, max(bloomDay) + 1
    while left < right:
        mid = (left + right) // 2
        if possible(mid):
            right = mid
        else:
            left = mid + 1
    if possible(left):
        return left
    else:
        return left + 1

bloomDay = [5,5,5,5,10,5,5]
m = 2
k = 3
print(solve(bloomDay, m, k))

इनपुट

[5,5,5,5,10,5,5], 2, 3

आउटपुट

10
  1. Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें? Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें?

    डायरेक्टेड एसाइक्लिक ग्राफ (DAG) में जिन वर्टेक्सेज़ का इन-डिग्री 0 है, उनसे सभी नोड्स पहुंचे जा सकते हैं। एल्गोरिदम सभी नोड्स का सेट बनाएं (0 से n-1)। सभी एजेज़ के डेस्टिनेशन नोड्स (v) का सेट बनाएं। सोर्स नोड्स = सभी नोड्स - डेस्टिनेशन नोड्स (यानी इन-डिग्री 0 वाले)। यही मिनिमम वर्टेक्स सेट है। उद

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

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

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

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