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

পাইথনে সর্বোচ্চ প্রস্থের র্যাম্প বের করার প্রোগ্রাম


মনে করুন nums নামক একটি অ্যারে আছে। একটি র্যাম্প হলো একটি টাপল (i, j) যেখানে i < j এবং nums[i] <= nums[j]। এমন একটি র্যাম্পের প্রস্থ হলো (j-i)। আমাদের nums-এ সর্বোচ্চ প্রস্থের র্যাম্প বের করতে হবে। যদি এমন কোনো র্যাম্প না থাকে, তবে ০ রিটার্ন করুন।

যেমন, ইনপুট nums = [6,0,8,2,1,5] হলে, আউটপুট হবে ৪ কারণ সর্বোচ্চ প্রস্থের র্যাম্প (i, j) = (1, 5)-এ পাওয়া যায় এবং nums[1] = 0, nums[5] = 5।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • B := একটি নতুন ম্যাপ

  • i = 0 থেকে nums-এর সাইজ - ১ পর্যন্ত

    • x := nums[i]

    • যদি x B-এ থাকে, তবে

      • i কে B[x]-এর শেষে অ্যাপেন্ড করুন

    • অন্যথায়,

      • B[x] := [i]

  • mini := [inf] দিয়ে ইনিশিয়ালাইজড একটি লিস্ট

  • maxi := [-inf] দিয়ে ইনিশিয়ালাইজড একটি লিস্ট

  • B-এর সব কী সর্টেড লিস্ট-এ জন্য

    • mini-এর শেষ এলিমেন্ট এবং B[x]-এর মিনিমামের মিনিমাম কে mini-এ অ্যাপেন্ড করুন

  • B-এর সব কী রিভার্স সর্টেড লিস্ট-এ জন্য

    • maxi-এর শেষ এলিমেন্ট এবং B[x]-এর ম্যাক্সিমামের ম্যাক্সিমাম কে maxi-এ অ্যাপেন্ড করুন

  • maxi := রিভার্স করা maxi এর শুরু থেকে দ্বিতীয় শেষ এলিমেন্ট পর্যন্ত

  • mini := mini[1:] (দ্বিতীয় এলিমেন্ট থেকে শেষ)

  • p := 0, res := -inf

  • যখন p < mini-এর সাইজ, तब

    • res := max(res, maxi[p] - mini[p])

    • p := p + 1

  • res রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

def solve(nums):    B = {}    for i in range(len(nums)):       x = nums[i]       if x in B:          B[x].append(i)       else:          B[x] = [i]    mini = [float('inf')]    maxi = [float('-inf')]    for x in sorted(B.keys()):       mini.append(min(mini[-1], min(B[x])))    for x in sorted(B.keys(), reverse = True):       maxi.append(max(maxi[-1], max(B[x])))    maxi = maxi[::-1][:-1]    mini = mini[1:]    p = 0    res = float('-inf')    while p < len(mini):       res = max(res, maxi[p] - mini[p])       p += 1 return res nums = [6,0,8,2,1,5] print(solve(nums)) 

ইনপুট

[6,0,8,2,1,5]

আউটপুট

4 

  1. পাইথন প্রোগ্রাম - যেকোনো জায়গায় ৫ যোগ করে সর্বাধিক সংখ্যা বের করুন

  2. Python-এ সর্বোচ্চ বিল্ডিং হাইট বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রির সর্বাধিক প্রস্থ (Maximum Width) বের করার প্রোগ্রাম

  4. পাইথনে তিনটি সংখ্যার মধ্যে সর্বোচ্চ মান বের করা