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

पायथन में कम से कम k आकार की सबलिस्ट का सबसे बड़ा औसत ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक अन्य मान k है, हमें किसी भी सबलिस्ट का सबसे बड़ा औसत मान ज्ञात करना है जिसकी लंबाई कम से कम k है।

इसलिए, यदि इनपुट nums = [2, 10, -50, 4, 6, 6] k = 3 जैसा है, तो आउटपुट 5.33333333 होगा, क्योंकि सबलिस्ट [4, 6, 6] का सबसे बड़ा औसत मान है।

हल करने के चरण

  • left := nums का न्यूनतम, right := nums का अधिकतम

  • s := nums में इंडेक्स 0 से k - 1 तक सभी संख्याओं का योग

  • largest_avg := s / k

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

    • mid := (left + right) / 2 का पूर्णांक

    • sum1 := s, avg := s / k, sum2 := 0, cnt := 0

    • i के लिए k से nums के आकार तक की रेंज में, करें

      • sum1 := sum1 + nums[i]

      • sum2 := sum2 + nums[i - k]

      • cnt := cnt + 1

      • avg := avg और (sum1 / (cnt + k)) का अधिकतम

      • यदि sum2 / cnt <= mid, तो

        • sum1 := sum1 - sum2

        • cnt := 0, sum2 := 0

      • avg := avg और (sum1 / (cnt + k)) का अधिकतम

    • largest_avg := largest_avg और avg का अधिकतम

    • यदि avg > mid, तो left := mid + 1

    • अन्यथा, right := mid - 1

  • largest_avg लौटाएं

उदाहरण

class Solution:
    def solve(self, nums, k):
        left, right = min(nums), max(nums)
        s = sum(nums[:k])
        largest_avg = s / k
        while left <= right:
            mid = (left + right) // 2
            sum1 = s
            avg = s / k
            sum2 = 0
            cnt = 0
            for i in range(k, len(nums)):
                sum1 += nums[i]
                sum2 += nums[i - k]
                cnt += 1
                avg = max(avg, sum1 / (cnt + k))
                if sum2 / cnt <= mid:
                    sum1 -= sum2
                    cnt = 0
                    sum2 = 0
                avg = max(avg, sum1 / (cnt + k))
            largest_avg = max(largest_avg, avg)
            if avg > mid:
                left = mid + 1
            else:
                right = mid - 1
        return largest_avg

ob = Solution()
nums = [2, 10, -50, 4, 6, 6]
k = 3
print(ob.solve(nums, k))

इनपुट

[2, 10, -50, 4, 6, 6], k = 3

आउटपुट

5.333333333333333
  1. - पायथन में लॉग्स को डेटाबेस में पूरी तरह स्टोर करने के लिए सबसे बड़े ट्रंकेट साइज को खोजने का प्रोग्राम

    मान लीजिए हमारे पास logs नामक संख्याओं की एक सूची है और एक मान limit है। logs[i में प्रत्येक तत्व i-वें उपयोगकर्ता द्वारा उत्पन्न लॉग्स का आकार दर्शाता है। और limit उस कुल आकार को दर्शाता है जिसे हम अपने डेटाबेस में स्टोर कर सकते हैं। हमें सबसे बड़ा x ढूंढना है जैसे कि यदि हम logs में हर लॉग को अधिक

  1. पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम

    मान लीजिए हमें एक ग्राफ दिया गया है और हमें उसमें सबसे बड़े क्लिक का न्यूनतम आकार ढूंढना है। एक ग्राफ का क्लिक ग्राफ का एक उपसमुच्चय है जहां हर जोड़ी शीर्ष आसन्न होती है, यानी हर जोड़ी शीर्ष के बीच एक किनारा मौजूद होता है। ग्राफ में सबसे बड़ा क्लिक ढूंढना बहुपद समय में संभव नहीं है, इसलिए छोटे ग्रा

  1. Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक ऐरे दिया गया है, हमें ऐरे के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स दृष्टिकोण का उपयोग करते हैं जिसमें हम पूरे लूप को पार करके और तत्व प्राप्त करके सबसे बड़ा तत्व निकालते हैं। हम नीच