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

पायथन में न्यूनतम k-लंबाई सबलिस्ट की संख्या गिनने का प्रोग्राम जिसे फ्लिप करके सूची के सभी आइटम 0 बनाए जा सकते हैं


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है जिसमें 0 और 1 संग्रहीत हैं। हमारे पास एक मान k भी है। एक ऑपरेशन पर विचार करें जहां हम लंबाई k के एक सबलिस्ट को फ्लिप करते हैं ताकि सभी 1, 0 बन जाएं और सभी 0, 1 बन जाएं। हमें nums को सभी 0 में बदलने के लिए आवश्यक न्यूनतम ऑपरेशनों की संख्या ज्ञात करनी है। यदि हम इसे बदल नहीं सकते तो -1 वापस करें।

उदाहरण के लिए, nums = [1,1,1,0,0,1,1,1], k = 3 के लिए आउटपुट 2 होगा (पहले तीन और अंतिम तीन को फ्लिप करें)।

एल्गोरिदम (ग्रीडी विंडो फ्लिप)

  • n := len(nums), res := 0, flipped := 0
  • to_conv := आकार n की सूची 0 से भरी हुई
  • i = 0 से n-1 तक:
    • flipped ^= to_conv[i]
    • cur = nums[i] ^ flipped
    • यदि cur == 1:
      • flipped ^= 1, res++
      • यदि i + k - 1 >= n, तो -1 वापस करें
      • यदि i + k < n, तो to_conv[i+k] = 1
  • res वापस करें

उदाहरण

class Solution:
    def solve(self, nums, k):
        n = len(nums)
        res = 0
        flipped = 0
        to_conv = [0] * n
        for i in range(n):
            flipped ^= to_conv[i]
            cur = nums[i] ^ flipped
            if cur == 1:
                flipped ^= 1
                res += 1
                if i + k - 1 >= n: return -1
                if i + k < n: to_conv[i + k] = 1
        return res

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

इनपुट

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

आउटपुट

2
  1. - Python प्रोग्राम - दो स्ट्रिंग को समान बनाने के लिए न्यूनतम डिलीशन

    दो लोअरकेस स्ट्रिंग s और t दी गई हैं। एक ऑपरेशन पर विचार करें जहां हम इन दोनों स्ट्रिंग में से किसी में भी किसी भी वर्ण को हटा सकते हैं। हमें s और t को समान बनाने के लिए आवश्यक न्यूनतम ऑपरेशन की संख्या खोजनी है। उदाहरण इनपुट: s = pipe, t = ripe आउटपुट: 2 व्याख्या: हम s से p और t से r हटा सकते हैं त

  1. - पायथन में किसी सूची के सभी क्रमपरिवर्तनों के विशेष मानों का औसत गिनने का प्रोग्राम

    मान लीजिए हमारे पास तत्वों की एक सूची है, हम निम्न एल्गोरिथम द्वारा S का मान निकाल सकते हैं। जब तक L का आकार > 1 शून्येतर है, करें a := L[0] b := L[1] L[1] को हटाएं L[0] := a + b + a*b वापस करें L[0] mod (10^9 + 7) यहां हमें L के सभी संभावित क्रमपरिवर्तनों से गणना किए गए सभी S मा

  1. Python में सभी अलग-अलग कोर्स कवर करने के लिए न्यूनतम सेमेस्टर गिनने का प्रोग्राम Python में सभी अलग-अलग कोर्स कवर करने के लिए न्यूनतम सेमेस्टर गिनने का प्रोग्राम

    मान लीजिए हमारे पास एक संख्या n है, जो दर्शाती है कि 1 से n तक लेबल किए गए n अलग-अलग कोर्स हैं। हमारे पास एक ऐरे relations भी है जहां relations[i] में एक जोड़ी (prevCourse_i, nextCourse_i) होती है, जो कोर्स prevCourse_i और कोर्स nextCourse_i के बीच एक पूर्वापेक्षा संबंध को दर्शाती है: यानी कोर्स pr