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

पायथन में खाए गए अधिकतम सेबों की संख्या ज्ञात करने का प्रोग्रलम


मान लीजिए हमारे पास days और apples नामक दो सरणियाँ हैं जिनकी लंबाई n है। एक विशेष प्रकार का सेब का पेड़ लगातार n दिनों तक हर दिन सेब उगाता है। i-वें दिन, यह apples[i] संख्या में सेब उगाता है और वह days[i] दिनों के बाद सड़ जाएगा, इसलिए हम कह सकते हैं कि दिन i + days[i] पर सेब सड़ जाएंगे और खाए नहीं जा सकते। कुछ दिनों में, यदि apples[i] = 0, और days[i] = 0, तो यह दर्शाता है कि दिन i पर सेब का पेड़ कोई सेब नहीं उगा रहा है। हम एक दिन में अधिकतम एक सेब खा सकते हैं। (हम पहले n दिनों के बाद भी खाना जारी रख सकते हैं)। यहां हमें खाए जा सकने वाले सेबों की अधिकतम संख्या ज्ञात करनी है।

इसलिए, यदि इनपुट है apples = [1,2,3,5,2] days = [3,2,1,4,2], तो आउटपुट 7 होगा क्योंकि:

  • दिन 1 पर, हम पहले दिन उगा एक सेब खाते हैं।

  • दिन 2 पर, हम दूसरे दिन उगा एक सेब खाते हैं।

  • दिन 3 पर, हम दूसरे दिन उगा एक सेब खाते हैं। लेकिन इस दिन के बाद, तीसरे दिन उगे सेब सड़ जाएंगे।

  • दिन 4 से 7 तक, हम चौथे दिन उगे सेब खाते हैं।

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

  • minheap := एक नया खाली हीप
  • day := 0, res := 0
  • i को 0 से apples के आकार - 1 तक के लिए, करें
    • day := i
    • जब तक minheap खाली नहीं है और minheap के शीर्ष का सड़ने का मान - day, करें
      • minheap से शीर्ष तत्व हटाएं
    • nbrApple := apples[i]
    • expiration := i + days[i]-1
    • यदि nbrApple > 0, तो
      • (expiration, nbrApple) जोड़ी को minheap में डालें
    • यदि minheap खाली नहीं है, तो
      • (date, apple) := minheap का शीर्ष तत्व और इसे हीप से हटाएं
      • res := res + 1
      • यदि apple > 1, तो
        • (date, apple-1) जोड़ी को minheap में डालें
  • जब तक minheap खाली नहीं है, करें
    • day := day + 1
    • जब तक minheap खाली नहीं है और minheap के शीर्ष का सड़ने का मान < day, करें
      • minheap से शीर्ष तत्व हटाएं
    • यदि minheap खाली है, तो
      • लूप से बाहर आएं
    • (date, apple) := minheap का शीर्ष और इसे हीप से हटाएं
    • res := res + 1
    • यदि apple > 1, तो
      • (date, apple-1) जोड़ी को minheap में डालें
  • res वापस करें

उदाहरण

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

import heapq

def solve(apples, days):
    minheap = []
    heapq.heapify(minheap)
    day = 0
    res = 0
    for i in range(len(apples)):
        day = i
        while minheap and minheap[0][0] < day:
            heapq.heappop(minheap)
        nbrApple = apples[i]
        expiration = i + days[i] - 1
        if nbrApple > 0:
            heapq.heappush(minheap, (expiration, nbrApple))
        if minheap:
            date, apple = heapq.heappop(minheap)
            res += 1
            if apple > 1:
                heapq.heappush(minheap, (date, apple - 1))
    while minheap:
        day += 1
        while minheap and minheap[0][0] < day:
            heapq.heappop(minheap)
        if minheap == []:
            break
        date, apple = heapq.heappop(minheap)
        res += 1
        if apple > 1:
            heapq.heappush(minheap, (date, apple - 1))
    return res

apples = [1,2,3,5,2]
days = [3,2,1,4,2]
print(solve(apples, days))

इनपुट

[1,2,3,5,2],[3,2,1,4,2]

आउटपुट

7
  1. Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें

    n इमारतें एक पंक्ति में (1 से n लेबल)। प्रतिबंध: restrictions[i] = (id, max_height)। नियम: ऊंचाई ≥ 0, पहली इमारत की ऊंचाई = 0, आसन्न इमारतों में ऊंचाई अंतर ≤ 1। अधिकतम संभव ऊंचाई खोजें। एल्गोरिदम: दो पास + शिखर गणना प्रतिबंधों को id द्वारा सॉर्ट करें फॉरवर्ड पास: बाएं से दाएं, प्रत्येक प्रतिबंध को

  1. - पायथन प्रोग्राम: मैप फंक्शन का उपयोग करके अधिकतम 1's वाली पंक्ति खोजना

    2D ऐरे दिया गया है और ऐरे के एलिमेंट्स 0 और 1 हैं। सभी पंक्तियाँ सॉर्टेड हैं। हमें अधिकतम संख्या में 1s वाली पंक्ति खोजनी है। यहां हम map() का उपयोग करते हैं। मैप फंक्शन पायथन बिल्ट-इन्स में से सबसे सरल है जिसका उपयोग फंक्शनल प्रोग्रामिंग के लिए किया जाता है। ये टूल्स फंक्शन्स को सीक्वेंसेज और अन्य

  1. - पायथन प्रोग्राम: तीन नंबर्स में अधिकतम

    तीन नंबर a, b और c दिए गए हैं, हमारा कार्य दिए गए नंबरों में से अधिकतम एलिमेंट ढूंढना है।उदाहरणInput: a = 2, b = 4, c = 3 Output: 4एल्गोरिदमचरण 1: तीन यूजर इनपुट नंबर इनपुट करें। चरण 2: तीन नंबर्स को लिस्ट में जोड़ें। चरण 3: सबसे बड़ी संख्या खोजने के लिए max() फंक्शन का उपयोग करें max(lst)। चरण 4: औ