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

পাইথন প্রোগ্রাম - K দৈর্ঘ্যের সাবলিস্ট মুছে ন্যূনতম অ্যাম্প্লিচিউড বের করুন

মনে করুন nums নামে একটি সংখ্যার লিস্ট এবং k একটি মান। প্রথমে k দৈর্ঘ্যের একটি সাবলিস্ট সরান, তারপর (maximum of nums - minimum of nums)-এর ন্যূনতম মান বের করুন।

ইনপুট nums = [2, 3, 10, 9, 8, 4], k = 3 হলে আউটপুট হবে ২, কারণ [10, 9, 8] সরালে [2, 3, 4] থাকে এবং 4 - 2 = 2।

সমাধানের ধাপসমূহ:

  • N := len(nums)
  • nums কপি করে lmin, lmax, rmin, rmax তৈরি করুন
  • i = 1 থেকে N-1 পর্যন্ত:
    • lmin[i] := min(lmin[i], lmin[i-1])
    • lmax[i] := max(lmax[i], lmax[i-1])
  • i = N-2 থেকে 0 পর্যন্ত (১ কমানো):
    • rmin[i] := min(rmin[i], rmin[i+1])
    • rmax[i] := max(rmax[i], rmax[i+1])
  • ans := min(rmax[k] - rmin[k], lmax[~k] - lmin[~k])
  • i = 0 থেকে N-k-2 পর্যন্ত:
    • cand := max(lmax[i], rmax[i+k+1]) - min(lmin[i], rmin[i+k+1])
    • ans := min(ans, cand)
  • ans ফেরত দিন

উদাহরণ

বাস্তবায়ন:

def solve(nums, k):
    N = len(nums)
    lmin, lmax = nums[:], nums[:]
    rmin, rmax = nums[:], nums[:]
    for i in range(1, N):
        lmin[i] = min(lmin[i], lmin[i - 1])
        lmax[i] = max(lmax[i], lmax[i - 1])
    for i in range(N - 2, -1, -1):
        rmin[i] = min(rmin[i], rmin[i + 1])
        rmax[i] = max(rmax[i], rmax[i + 1])
    ans = min(rmax[k] - rmin[k], lmax[~k] - lmin[~k])
    for i in range(N - k - 1):
        cand = max(lmax[i], rmax[i + k + 1]) - min(lmin[i], rmin[i + k + 1])
        ans = min(ans, cand)
    return ans

nums = [2, 3, 10, 9, 8, 4]
k = 3
print(solve(nums, k))

ইনপুট

[2, 3, 10, 9, 8, 4], 3

আউটপুট

2
  1. পাইথনে রঙ মার্জ করলে অবশিষ্ট ন্যূনতম রঙের সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে k সরাসরি ডুপ্লিকেট অক্ষর মুছে স্ট্রিং পরিশোধ

  3. পাইথনে k অপারেশন পর পর সর্বনিম্ন সম্ভাব্য সর্বোচ্চ মান বের করার প্রোগ্রাম

  4. পাইথনে K বৃদ্ধি করলে সর্বোচ্চ সমান উপাদান সাবলিস্টের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম