কম্পিউটার টিউটোরিয়াল

পাইথনে কমপক্ষে k আকারের সাবলিস্টের সর্বোচ্চ গড় বের করা

ধরুন, একটি সংখ্যার লিস্ট nums এবং একটি মান k দেওয়া আছে। আমাদের এমন একটি সাবলিস্ট (Subarray) খুঁজে বের করতে হবে যার দৈর্ঘ্য কমপক্ষে k এবং গড় মান সর্বোচ্চ।

উদাহরণস্বরূপ, nums = [2, 10, -50, 4, 6, 6], k = 3 হলে আউটপুট হবে 5.33333333, কারণ সাবলিস্ট [4, 6, 6]-এর গড় সর্বোচ্চ।

সমাধানের ধাপসমূহ (বাইনারি সার্চ + প্রিফিক্স সাম)

  1. left := min(nums), right := max(nums)

  2. প্রথম k উপাদানের যোগফল s, প্রাথমিক গড় largest_avg = s / k।

  3. যখন left <= right:

    • mid = (left + right) // 2

    • স্লাইডিং উইন্ডো দিয়ে চেক করুন যে mid গড় অর্জন করা সম্ভব কিনা।

    • sum1, sum2, cnt ম্যানেজ করুন এবং সর্বোচ্চ গড় avg ট্র্যাক করুন।

    • largest_avg = max(largest_avg, avg)

    • যদি avg > mid হয়, তবে left = mid + 1, অন্যথায় right = mid - 1।

  4. 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. পাইথনে গ্রাফে সর্বোচ্চ ক্লিকের ন্যূনতম আকার বের করার প্রোগ্রাম

  2. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা

  3. পাইথন প্রোগ্রাম: অ্যানাগ্রাম শব্দের সর্বোচ্চ সাবসেটের আকার বের করা

  4. পাইথন প্রোগ্রাম: অ্যানাগ্রাম শব্দের সর্বোচ্চ সাবসেটের আকার বের করা (Duplicate)